Was ist der „??“ Operator? [Duplikat]
-
05-07-2019 - |
Frage
Diese Frage bereits eine Antwort hier:
Ich habe mich gefragt, über ??
Zeichen in C#
Code. Wofür ist das? Und wie kann ich es verwenden?
Was ist int?
? Ist es ein Nullable-int?
Siehe auch:
Lösung
Es ist die „Null-Koaleszenz-Operator“ genannt und funktioniert so etwas wie folgt aus:
Statt tun:
int? number = null;
int result = number == null ? 0 : number;
Sie können jetzt nur tun:
int result = number ?? 0;
Andere Tipps
Es ist der null Koaleszierstruktur Operator . Es wurde in C # 2 eingeführt.
Das Ergebnis des Ausdrucks a ?? b
ist a
wenn das nicht null ist, oder b
anders. b
wird nicht ausgewertet, wenn es gebraucht wird.
Zwei schöne Dinge:
-
Der Gesamt Typ des Ausdrucks ist die der zweiten Operanden, was wichtig ist, wenn Sie Nullable-Wertetypen verwenden:
int? maybe = ...; int definitely = maybe ?? 10;
(Beachten Sie, dass Sie keine Nicht-Nullable-Wertetyp als erster Operand verwenden können - es wäre sinnlos.)
-
Die Assoziativität Regeln bedeuten, Sie können Kette wirklich leicht. Zum Beispiel:
string address = shippingAddress ?? billingAddress ?? contactAddress;
Das wird verwenden, um den ersten Nicht-Null-Wert aus dem Versand, Rechnungsstellung oder Kontaktadresse.
Das ist der coalesce Operator. Es ist im Wesentlichen eine Abkürzung für die folgende
x ?? new Student();
x != null ? x : new Student();
MSDN-Dokumentation auf dem Operator
Es ist der neue Null Coalesce Operator.
Die ?? Operator gibt den linken Operanden, wenn es nicht null ist, sonst gibt er den rechten Operanden.
Sie können darüber lesen Sie hier: http://msdn.microsoft.com/en-us/ Bibliothek / ms173224 (VS.80) aspx
Es ist eine Abkürzung für:
Text = (category == null ? "Home" : category);
es ist der coalesce Betreiber. es wird einen anderen Wert zurück, wenn der erste Wert null
string value1 = null;
string value2 = "other";
string value3 = value1 ?? value2; // assigns "other" to value 3
überprüft er, ob die Kategorie null ist - wenn dies der Fall des Nullwert ist, wird durch „Home“ ersetzt
.Eines meiner Lieblings verwendet für den Null-Koaleszenz-Operator ist zu vermeiden, wenn Aussagen in meinem Code (Ich denke, wenn Aussagen hässlich sind und nur die Dinge Krempel die meiste Zeit auf). Zum Beispiel ein typisches Szenario nehmen, wo man etwas aus dem Cache, falls verfügbar, kann wählen, sonst aus der db laden zu laden und den Cache füllen.
private SomeData GetData() {
var data = HttpRuntime.Cache.Get("key") as SomeData;
if (data == null) {
data = DAL.GetData(some parameters...);
HttpRuntime.Cache.Add("key", data, ....);
}
return data;
}
Für mich ist das hässlich Code. Ich kann ein bisschen anal sein, aber warum Refactoring es nicht auf diese statt?
private SomeData GetDataAndCache() {
var data = DAL.GetData(some parameters...);
HttpRuntime.Cache.Add("key", data, ....);
return data;
}
private SomeData GetData() {
var data = HttpRuntime.Cache.Get("key") as SomeData;
return data ?? GetDataAndCache();
}
Es ist mehr eng an SRP und ist sauberer und leichter zu lesen, IMO. Die Funktionen erfüllen genau eine klar erkennbare Funktion jeder.
Wenn Kategorie null ist, Text wird "Start"
Gibt den ersten nicht-Null-Wert. Handlich.
int? int ist ein NULL festlegbaren, was bedeutet, es die Werte eines normalen int und null haben kann. Lesen Sie dieser .
Das ist der null-koaleszierenden Operator . Es ist mit Nullable Types (unter anderem verwendet , sorry:)