Freigeben über


Linter-Regel – Verwenden des Operators für den sicheren Zugriff

Diese Regel sucht nach der Verwendung der contains() Funktion zum Überprüfen des Vorhandenseins von Eigenschaften vor dem Zugriff und bietet eine einfachere automatische Ersetzung. Sie dient dazu, Benutzern eine vereinfachte gleichwertige Syntax zu empfehlen und einzuführen, ohne funktionsbezogene Codeänderungen einzuführen. Weitere Informationen finden Sie unter Operator für das sichere Dereferenzieren.

Die spezifischen Muster, nach denen gesucht wird, sind:

  • Ternärer Operator, der auf den Zugriff auf Eigenschaften überprüft werden soll:

    contains(<object>, '<property>') ? <object>.<property> : <default-value>
    

    Der folgende Ersatz wird vorgeschlagen:

    <object>.?<property> ?? <default-value>
    
  • Ternärer Operator, der auf den Zugriff variabler benannter Eigenschaften überprüft werden soll:

    contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
    

    Der folgende Ersatz wird vorgeschlagen:

    <object>[?<property-name>] ?? <default-value>
    

Linter-Regelcode

Um die Regeleinstellungen anzupassen, verwenden Sie den folgenden Wert in der Bicep-Konfigurationsdatei:

use-safe-access

Lösung

Akzeptieren Sie die Editor-Codeaktion, um die Umgestaltung automatisch auszuführen.

Beispiele

Zugriff auf die benannte Eigenschaft

Im folgenden Beispiel wird die Regel ausgelöst:

param foo object
var test = contains(foo, 'bar') ? foo.bar : 'baz'

Wenn Sie die Codeaktion akzeptieren, wird folgendes Bicep angezeigt:

param foo object
var test = foo.?bar ?? 'baz'

Zugriff auf variable Eigenschaft

Im folgenden Beispiel wird die Regel ausgelöst:

param foo object
param target string
var test = contains(foo, target) ? foo[target] : 'baz'

Wenn Sie die Codeaktion akzeptieren, wird folgendes Bicep angezeigt:

param foo object
param target string
var test = foo[?target] ?? 'baz'

Nicht-Probleme

Die folgenden Beispiele lösen die Regel nicht aus:

Unterschied zwischen dem Überprüfen der Eigenschaft und dem Zugriff auf die Eigenschaft:

param foo object
var test = contains(foo, 'bar') ? foo.baz : 'baz'

Unterschied zwischen dem Überprüfen der variablen Eigenschaft und dem Zugriff auf die variable Eigenschaft:

param foo object
param target string
param notTarget string
var test = contains(foo, target) ? bar[notTarget] : 'baz'

Nächste Schritte

Weitere Informationen über den Linter finden Sie unter Verwendung des Bicep-Linters.