Оператор безопасного разыменования Bicep

Оператор безопасного разыменования предоставляет безопасный способ доступа к свойствам объекта или элементов массива. Это помогает предотвратить ошибки, которые могут возникнуть при попытке доступа к свойствам или элементам без надлежащего знания об их существовании или значении.

безопасное разыменовывание

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

Оператор безопасного разыменования применяет операцию доступа к .?<property>элементам , или доступ к элементу , [?<index>]к своему операнду только в том случае, если этот операнд имеет значение, отличное от NULL; в противном случае возвращается значение NULL. Это означает следующее:

  • Если a вычисляется как null, то результатом a.?x или a[?x] является null.
  • Если a является объектом, который не имеет x свойства , то a.?x имеет значение null.
  • Если a является массивом, длина которого меньше или равна x, то a[?x] имеет значение null.
  • Если a имеет значение, отличное от NULL, и имеет свойство с именем x, результат a.?x будет таким же, как и результат .a.x
  • Если a имеет значение, отличное от NULL, и имеет элемент в индексе x, результат a[?x] будет таким же, как и результат a[x]

Операторы безопасного разыменования являются короткими замыканиями. То есть, если в цепочке операций условного доступа к элементу или члену одна из операций возвращает значение null, остальная цепочка не выполняется. В следующем примере не вычисляется, .?name если storageAccountsettings[?i] имеет значение null:

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

resource storage 'Microsoft.Storage/storageAccounts@2022-09-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'
  }
}]

Дальнейшие действия