2015-08-25 9 views
6

Von dem, was ich mit dem neuen null Operator in C# gesammelt 6.0 Sie etwas tun können:C# 6.0 Nulloperator in einer bedingten Anweisung

string name = people.FirstOrDefault()?.FullName; 

Und das ist toll, aber eine Überprüfung ich oft über gekommen ist so etwas wie diese:

object name = null; 
if(name != null) { 
    DoSomething(); 
} else { 
    DoSomethingElse(); 
} 

der Zweck der neuen null Betreiber gegeben, würde Ich mag so etwas wie dies sollte möglich sein:

Das Problem ist hier, was ich verstehen, dass, wenn der Wert der ? Überprüfung ist in der Tat ist null, es gibt null, und Sie benötigen eine bool Bedingung für die if Aussage. Da Sie eine null nicht direkt in eine bool konvertieren können, gibt es eine einfachere Möglichkeit, dies zu überprüfen, ohne if(name != null) mit dem neuen Operator null in C# 6.0 zu tun?

+12

Ernst? Die Eingabe '! = Null' ist nicht einfach genug? Es ist klar, es ist lesbar, der Entwickler, der den Code in sechs Monaten betrachtet, kann leicht verstehen, was es tut ... –

+3

Was wäre der Zweck eines solchen Betreibers? Was ist der Vorteil von 'if (name?) ...' im Gegensatz zu 'if (name! = Null)' –

+0

In JS können Sie einfach 'if (name)' und validiert für 'null', schien Für mich wäre das etwas nahes eine nette Sache und das es vielleicht im neuen Update ist, rate nicht. –

Antwort

13

Es macht keinen Sinn, dies zu tun. In Ihrem Beispiel wird kein Null-Koaleszieren ausgeführt - Sie suchen einfach nach null.

Eine bessere Verwendung wäre, wenn Sie ein Mitglied des Objekts name überprüfen möchten. Zum Beispiel:

if (name?.FirstName != null) ... 

Aber wie Sie sehen können, ist es noch ein einfacher Vergleich für null - wir so etwas wie dies gerade null verwendet Koaleszieren zu vermeiden, schreiben:

if (name != null && name.FirstName != null) ... 
+0

Ich stimme zu, dass es nicht die bessere Verwendung dieser Funktion wäre, aber ich ging für etwas viel einfacheres, etwas von der Art' if (name) 'in JS, wo es automatisch für' null' validiert. Danke für die Antwort. –

+0

Ich mache gerne etwas wie: if (Session? .Connected) {} ​​aber leider wird dies nicht unterstützt und Sie müssen etwas tun wie: if (Session? .Connected == true) {} – juFo

+3

@juFo Das ist offensichtlich Wenn Sie darüber nachdenken - da Sie den Koaleszenzoperator verwenden, wird der 'bool' in' bool? 'umgewandelt (der' null' muss sich durch alle Nullkoaleszen ausbreiten). Und 'if (default (bool?))' Macht genau so viel Sinn wie 'if (null)' zuzulassen - also nicht eine ganze Menge. Was Sie tun können, ist '(Sitzung? .Connected) .GetValueOrDefault (false)' - was viel expliziter ist als nur 'a == true'. – Luaan

Verwandte Themen