Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Diese Diagnose tritt auf, wenn Sie versuchen, auf eine Eigenschaft für einen Wert zuzugreifen, der möglicherweise nicht der Fall ist null. Die Diagnose wird auch ausgelöst, wenn versucht wird, auf eine Eigenschaft für eine bedingte Ressource zuzugreifen (d. r. eine Ressource, die mit einer if Klausel in Bicep deklariert wurde). Verweise auf Ressourcen mit einer false Bedingung führen in der Regel dazu, dass die Bereitstellung mit einem Überprüfungsfehler fehlschlägt.
Description
Der Wert des Typs "<resource-type> | null" kann am Anfang der Bereitstellung null sein, was dazu führen würde, dass dieser Zugriffsausdruck (und die allgemeine Bereitstellung damit) fehlschlägt.
Ebene
Warnung
Solutions
Wenn der Wert möglicherweise null ist und Die Vorlage null für den gesamten Ausdruck sicher verarbeiten kann, verwenden Sie den Operator "safe-dereference". Diese Kurzschlussschaltung des Zugriffs, wenn der Basisausdruck null oder eine Ressource ist, deren Bedingung lautet false.
Wenn Sie sicher sind, dass der Wert niemals null ist, verwenden Sie den Operator null-verzeihend , um dem Compiler mitzuteilen, dass er sicher ist. Dadurch wird die Kompilierungszeitüberprüfung deaktiviert, die Laufzeitüberprüfung wird jedoch weiterhin ausgeführt.
Examples
Im folgenden Beispiel wird die Diagnose ausgelöst, da Bicep nicht garantieren kann, dass accounts[i] sie für jedes i vorhanden ist range(0, storageCount). Einige Indizes werden übersprungen, sodass die direkte Indizierung unsicher ist.
param storageCount int
resource accounts 'Microsoft.Storage/storageAccounts@2015-01-01' = [for i in range(0, storageCount): if (i % 2 == 0) {
name: 'sa${i}'
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
output storageEndpoints array = [for i in range(0, storageCount): accounts[i].properties.primaryEndpoints.blob]
Sie können die Diagnose mithilfe des Operators "safe-dereference" beheben:
param storageCount int
resource accounts 'Microsoft.Storage/storageAccounts@2015-01-01' = [for i in range(0, storageCount): if (i % 2 == 0) {
name: 'sa${i}'
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
output storageEndpoints array = [for i in range(0, storageCount): accounts[i].?properties.primaryEndpoints.blob]
Im folgenden Beispiel wird die Diagnose ausgelöst, da die if Bedingung die Arraylänge zur Kompilierungszeit unbestimmt macht, sodass Bicep die direkte Indizierung wie accounts[0].
param storageCount int = 2
resource accounts 'Microsoft.Storage/storageAccounts@2015-01-01' = [for i in range(0, storageCount): if (i % 2 == 0) {
name: 'sa${i}'
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
output firstOne object = accounts[0].properties
Sie können die Diagnose mithilfe des Null-Verzeihungsoperators beheben:
param storageCount int = 2
resource accounts 'Microsoft.Storage/storageAccounts@2015-01-01' = [for i in range(0, storageCount): if (i % 2 == 0) {
name: 'sa${i}'
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
output firstOne object = accounts[0]!.properties
Nächste Schritte
Weitere Informationen zur Bicep-Diagnose finden Sie unter Bicep-Kerndiagnose.