Die Entwurfsspezifikation für die Musterübereinstimmung in C # enthält das folgende Codebeispiel:
Type? v = x?.y?.z;
if (v.HasValue) {
var value = v.GetValueOrDefault();
// code using value
}
Ich verstehe , dass Type?
zeigt an, dass Type
NULL - Werte zulässt, aber unter der Annahme x
, y
und z
sind Einheimische, was tut x?.y?.z
bedeuten?
c#
pattern-matching
tkocmathla
quelle
quelle
Antworten:
Beachten Sie, dass diese Sprachfunktion nur in C # 6 und höher verfügbar ist.
Es ist effektiv das Äquivalent von:
x == null ? null : x.y == null ? null : x.y.z
Mit anderen Worten, es ist eine "sichere" Methode
x.y.z
, bei der eine der Eigenschaften auf dem Weg null sein kann.Ebenfalls verwandt ist der Null-Koaleszenz-Operator (??) , der Werte zum Ersetzen bereitstellt
null
.quelle
Es ist ein Null-Propagationsoperator / Null-Bedingungsoperator? eine neue vorgeschlagene Funktion in C # 6.0
x?.y?.z
meintx
nicht null ist, und überprüfen Siey
andernfalls , ob null zurückgegeben wird.y
, ob es nicht null ist, und geben Siez
andernfalls null zurück.Der endgültige Rückgabewert ist
z
odernull
.Ohne diesen Operator, wenn er
x
null ist,x.y
würde der Zugriff eine Nullreferenzausnahme auslösen. Der nullbedingte Operator hilft dabei, eine explizite Überprüfung auf null zu vermeiden.Auf diese Weise können Sie eine Nullreferenzausnahme vermeiden.
Siehe: Machen Sie sich mit den bevorstehenden Sprachfunktionen in C # vertraut
int? length = customers?.Length; // null if customers is null
quelle
??
ist ganz anders:x ?? y
ist wiex != null ? x : y
. Undx?.y
ist wiex != null ? x.y : null
.z
odernull
this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();
Grundsätzlich.
quelle