NULL-bedingte Operatoren (C# und Visual Basic)Null-conditional Operators (C# and Visual Basic)

Wird für eine Prüfung auf null verwendet, bevor Sie eine Operation für den Memberzugriff (?.) oder die Indizierung (?[) ausführen.Used to test for null before performing a member access (?.) or index (?[) operation. Mithilfe dieser Operatoren müssen Sie für die Prüfung auf null weniger Code schreiben, insbesondere beim tieferen Eindringen in Datenstrukturen.These operators help you write less code to handle null checks, especially for descending into data structures.

int? length = customers?.Length; // null if customers is null   
Customer first = customers?[0];  // null if customers is null  
int? count = customers?[0]?.Orders?.Count();  // null if customers, the first customer, or Orders is null  
Dim length = customers?.Length  ' null if customers is null  
Dim first as Customer = customers?(0)  ' null if customers is null  
Dim count as Integer? = customers?(0)?.Orders?.Count()  ' null if customers, the first customer, or Orders is null  

Im letzten Beispiel wird veranschaulicht, dass die Null-Bedingungsoperatoren Kurzschlussoperatoren sind.The last example demonstrates that the null-condition operators are short-circuiting. Wenn ein Vorgang in einer Kette von bedingten Memberzugriffs- und Indexvorgängen null zurückgibt, wird die restliche Ausführung der Kette angehalten.If one operation in a chain of conditional member access and index operation returns null, then the rest of the chain’s execution stops. Andere Vorgänge mit niedrigerer Rangfolge im Ausdruck werden fortgesetzt.Other operations with lower precedence in the expression continue. Beispielsweise wird im folgenden Codebeispiel E in der zweiten Zeile ausgeführt, und die Operatoren ?? und == werden ausgeführt.For example, E in the following executes in the second line, and the ?? and == operations execute. In der ersten Zeile ruft ?? einen Kurzschluss hervor, und E wird nicht ausgeführt, wenn die linke Seite ungleich NULL ist.In the first line, the ?? short circuits and E does not execute when the left side evaluates to non-null.

A?.B?.C?[0] ?? E  
A?.B?.C?[0] == E  
A?.B?.C?(0) ?? E  
A?.B?.C?(0) == E  

Ein weiterer Verwendungszweck für den Null-Bedingungsmemberzugriff ist das Aufrufen von Delegaten auf threadsichere Weise mit viel weniger Code.Another use for the null-condition member access is invoking delegates in a thread-safe way with much less code. Die bisherige Methode erfordert Code wie den folgenden:The old way requires code like the following:

var handler = this.PropertyChanged;  
if (handler != null)  
    handler(…);
Dim handler = AddressOf(Me.PropertyChanged)  
If handler IsNot Nothing  
    Call handler(…)  

Die neue Methode ist viel einfacher:The new way is much simpler:

PropertyChanged?.Invoke(e)  
PropertyChanged?.Invoke(e)

Die neue Methode ist threadsicher, da der Compiler Code zum Auswerten von PropertyChanged nur einmal generiert und das Ergebnis in einer temporären Variablen behält.The new way is thread-safe because the compiler generates code to evaluate PropertyChanged one time only, keeping the result in a temporary variable.

Sie müssen die Invoke-Methode explizit aufrufen, da es keine Aufrufsyntax für Null-Bedingungsdelegate gibt PropertyChanged?(e).You need to explicitly call the Invoke method because there is no null-conditional delegate invocation syntax PropertyChanged?(e). Es gab zu viele mehrdeutige Analysesituationen.There were too many ambiguous parsing situations to allow it.

SprachspezifikationenLanguage Specifications

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Weitere Informationen finden Sie in der Sprachreferenz für Visual Basic.For more information, see the Visual Basic Language Reference.

Siehe auchSee Also

?? (Null-Sammeloperator)?? (null-coalescing operator)
C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
Sprachreferenz zu Visual BasicVisual Basic Language Reference
Visual Basic-ProgrammierhandbuchVisual Basic Programming Guide