PowerShell 7: Null Conditional Operator ?. und ?[]
In PowerShell 7.0 gibt es als experimentelles Feature den Null Conditional Operator ?. fĂĽr Einzelobjekte und ?[] fĂĽr Mengen.
- Dr. Holger Schwichtenberg
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:
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. ()