PowerShell 7: Null Conditional Operator ?. und ?[]

Der Dotnet-Doktor  –  0 Kommentare

In PowerShell 7.0 gibt es als experimentelles Feature den Null Conditional Operator ?. für Einzelobjekte und ?[] für Mengen.

Dieses Feature muss man zunächst aktivieren:

Enable-ExperimentalFeature PSNullConditionalOperators  

Nach der Aktivierung des Features und dem Start einer neuen PowerShell-7-Konsoleninstanz steht nun ein Operator in der PowerShell-Sprache zum Abfangen von Null-Referenz-Fehlern zur Verfügung, die es auch in der Programmiersprache C# schon seit deren Version 6.0 gibt: ?. anstelle von .

Während der Punkt-Operator mit einem Laufzeitfehler abstürzt, wenn er auf ein Objekt angewendet wird, das den Wert $null hat (z. B. eine nicht initialisierte Variable), ist ?. in diesem Fall tolerant und gibt $null weiter.

In der PowerShell ist zu beachten, dass es aber nicht reicht, . durch ?. zu ersetzen wie in C#. Vielmehr muss man den Variablennamen auch in geschweifte Klammern setzen. Grund dafür ist, dass das Fragezeichen in PowerShell ein Teil des Variablennamens sein darf.

${variablenname}?.Methode() 

oder

${ variablenname }?.Property

Details dazu zeigt die folgende Bildschirmabbildung:

Null Conditional Operator in PowerShell 7

Mengenelementzugriff mit ?[]

Für Mengen setzt man neu neuen Operator ?[] ein. Bei der Menge

$menge = $null

führt der Befehl

$menge[100]

normalerweise zum Laufzeitfehler: "InvalidOperation: Cannot index into a null array."

Der Befehl

${menge}?[100]

führt nicht zum Fehler, weil er $null liefert. Der Operator ?[] ist nicht notwendig, wenn man bei einer initialisierten Menge auf ein Element zugreift, dass es nicht gibt.

$menge = 1..10
$menge[100]

In diesem Fall gibt es keinen Laufzeitfehler. Gleichwohl kann man aus Vorsicht auch hier schreiben

${menge}?[100]

wenn man nicht sicher ist, dass $menge initialisiert ist.