Bicep safe-dereference 运算符

safe-dereference 运算符提供了一种以安全方式访问对象属性或数组元素的方法。 它有助于防止在不了解其存在或值的情况下尝试访问属性或元素时可能发生的错误。

safe-dereference

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

仅当操作数的计算结果为非 null 时,safe-dereference 才对其操作数应用成员访问 .?<property> 或元素访问 [?<index>] 操作;否则,它会返回 null。 即:

  • 如果 a 的计算结果为 null,则 a.?xa[?x] 的结果为 null
  • 如果 a 是没有 x 属性的对象,则 a.?xnull
  • 如果 a 是一个在索引 x 处没有元素的对象,那么 a[?x] 就是 null
  • 如果 a 是长度小于或等于 x 的数组,则 a[?x]null
  • 如果 a 为非 null 且具有名为 x 的属性,则 a.?x 的结果与 a.x 的结果相同。
  • 如果 a 为非 null 且在索引 x 处有一个元素,则 a[?x] 的结果与 a[x] 的结果相同

safe-dereference 运算符为短路运算符。 也就是说,如果条件成员或元素访问运算链中的一个运算返回 null,则链的其余部分不会执行。 在以下示例中,如果 storageAccountsettings[?i] 计算结果为 null,则不计算 .?name

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'
  }
}]

后续步骤