C# Null Vermehrung operator / Conditional-access-Ausdruck & wenn Blöcke
Den Null Vermehrung operator /Conditional-access-Ausdruck coming in c#-6.0 sieht aus wie ein Recht praktisches feature. Aber ich bin mal gespannt, ob es wird helfen, lösen das problem der überprüfung, ob ein untergeordnetes Element, das nicht null ist und dann den Aufruf ein Boolean-Methode auf, sagte Kind Mitglied innerhalb von if-block:
public class Container<int>{
IEnumerable<int> Objects {get;set;}
}
public Container BuildContainer()
{
var c = new Container();
if (/* Some Random Condition */)
c.Objects = new List<int>{1,2,4};
}
public void Test()
{
var c = BuildContainer();
//Old way
if ( null != c && null != c.Objects && c.Objects.Any())
Console.Write("Container has items!");
//C# 6 way?
if (c?.Object?.Any())
Console.Write("Container has items!");
}
Wird c?.Object?.Any()
kompilieren? Wenn die Vermehrung Betreiber Kurzschlüsse (ich nehme an, dass ist der richtige Begriff) auf null, dann müssen Sie if (null)
die nicht gültig ist.
Wird das C# - team mit diesem Anliegen befassen oder bin ich fehlt der Verwendungszweck Falle der null-Vermehrungs-Betreiber?
InformationsquelleAutor der Frage Philip Pittle | 2014-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktioniert es nicht auf diese Weise. Sie können einfach überspringen Sie die Erklärung und sehen Sie den code unten 🙂
Wie Sie wissen
?.
operator null zurück, wenn eines untergeordneten Elements ist null. Aber was passiert, wenn wir versuchen, ein nicht-null-Werte zulässt-Mitglied, wie dieAny()
Methode zurückgibtbool
? Die Antwort ist, dass der compiler "wrap" ein Rückgabewert inNullable<>
. Zum BeispielObject?.Any()
unsbool?
(das istNullable<bool>
), nichtbool
.Die einzige Sache, die nicht zulassen, wird uns mit diesem Ausdruck in der
if
Aussage ist, dass es nicht implizit gecastet zubool
. Aber man kann den Vergleich explizit, bevorzuge ich im Vergleich zutrue
wie diese:Dank @DaveSexton gibt es eine andere Möglichkeit:
Aber als bei mir, Vergleich zu
true
scheint natürlicher 🙂InformationsquelleAutor der Antwort Eldar Dordzhiev
Null-conditional operator zurückkehren würde
null
oder den Wert am Ende des Ausdrucks. Für Werttypen zurück führenNullable<T>
werden, also in deinem Fall wäre esNullabe<bool>
. Wenn wir uns an das Beispiel im Dokument für Kommende Features in C# (angegeben hier)er hat ein Beispiel:In dem oben beschriebenen Beispiel statt
int
Nullable<int>
zurückgegeben werden. Fürbool
es zurückNullable<bool>
.Wenn Sie versuchen, den folgenden code in Visual Studio "14" CTP:
Dem Ergebnis der obigen Zeile würde eine
Nullable<bool>
/bool?
. Später können Sie den Vergleich wie:Mit null-coalescing operator ??
Mit
Nullable<T>.GetValueOrDefault
MethodeVergleich gegen
true
InformationsquelleAutor der Antwort Habib