Bicep safe-dereference-Operator

Der safe-dereference-Operator ermöglicht den sicheren Zugriff auf die Eigenschaften eines Objekts oder auf die Elemente in einem Array. Mithilfe dieses Operators können Fehler vermieden werden, wenn versucht wird, auf Eigenschaften oder Elemente zuzugreifen, wenn deren Existenz oder Wert nicht genau bekannt ist.

safe-dereference

<base>.?<property> <base>[?<index>]

Ein safe-dereference-Operator wendet nur dann eine Operation mit Memberzugriff (.?<property>) oder Elementzugriff ([?<index>]) auf seinen Operanden an, wenn dieser Operand mit ungleich NULL ausgewertet wird. Andernfalls gibt er NULL zurück. Dies bedeutet:

  • Wenn a als null ausgewertet wird, ist das Ergebnis von a.?x oder a[?x]null.
  • Wenn a ein Objekt ist, das keine x-Eigenschaft hat, dann gilt: a.?x ist null.
  • Wenn a ein Array ist, dessen Länge kleiner oder gleich x ist, dann gilt: a[?x] ist null.
  • Wenn a ungleich NULL ist und über eine Eigenschaft namens x verfügt, entspricht das Ergebnis von a.?x dem Ergebnis von a.x.
  • Wenn a ungleich NULL ist und über ein Element beim Index x verfügt, entspricht das Ergebnis von a[?x] dem Ergebnis von a[x].

Die safe-dereference-Operatoren sind Kurzschlussoperatoren. D.h., wenn ein Vorgang in einer Kette von bedingten Member- oder Elementzugriffsvorgängen null zurückgibt, wird der Rest der Kette nicht ausgeführt. Im folgenden Beispiel wird .?name nicht ausgewertet, wenn storageAccountsettings[?i] als null ausgewertet wird:

param storageAccountSettings array = []
param storageCount int
param location string = resourceGroup().location

resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' = [for i in range(0, storageCount): {
  name: storageAccountSettings[?i].?name ?? 'defaultname'
  location: storageAccountSettings[?i].?location ?? location
  kind: storageAccountSettings[?i].?kind ?? 'StorageV2'
  sku: {
    name: storageAccountSettings[?i].?sku ?? 'Standard_GRS'
  }
}]

Nächste Schritte