Gibt es so etwas wie eine verkettete NULL-Prüfung?

7

Ich habe den folgenden hässlichen Code:

%Vor%

Gibt es eine Möglichkeit, eine Kettenüberprüfung auf Nullwerte in C # durchzuführen, damit ich nicht jede einzelne Ebene überprüfen muss?

    
AngryHacker 22.04.2014, 22:17
quelle

7 Antworten

9

Einer der Vorschläge in C # 6 wäre das Hinzufügen eines neuen Nullpropagationsoperator .

Dies wird Ihnen (hoffentlich) erlauben zu schreiben:

%Vor%

Leider gibt es an dieser Stelle in der Sprache nichts, was dies angeht.

    
Reed Copsey 22.04.2014, 22:24
quelle
4

Momentan gibt es so etwas nicht, aber es könnte bald auf .NET kommen. Es gibt einen bekannten User-Voice-Thread zum Thema . Und wie in Dieser Artikel hat das Visual Studio-Team kürzlich angekündigt:

  

Wir denken ernsthaft über diese Funktion für C # und VB nach und werden es sein   Prototyping in den kommenden Monaten.

Bearbeiten: und wie in Reed Copseys Antwort oben erwähnt, ist es jetzt eine geplante Ergänzung für C # 6. Es gibt bessere Details auf den verlinkten Codeplex-Seiten.

    
Kimberly 22.04.2014 22:24
quelle
2

Es gibt keine integrierte Unterstützung dafür, aber Sie können dafür eine Erweiterungsmethode verwenden:

%Vor%

Dann rufe es an:

%Vor%     
Selman Genç 22.04.2014 22:26
quelle
2

Sie brauchen Monaden und Monadische Nullprüfung. Schauen Sie sich das Monads.Net-Paket an. Es kann dabei helfen, Null-Tests zu vereinfachen und Werte aus den tiefen Navigationseigenschaften abzurufen

Etwas wie

%Vor%

Wenn Sie einen Standardwert haben wollten,

%Vor%     
GraemeMiller 22.04.2014 22:29
quelle
2

Sie können die Werte mithilfe von Lambda-Ausdrücken langsam auswerten. Dies ist ein Overkill für einen einfachen Null-Check, kann aber nützlich sein, um komplexere Ausdrücke auf "fließende" Weise zu verketten.

Beispiel

%Vor%

Code

Dies ist ein vollständiges Beispiel (Code in Entwurfsqualität), das in eine Konsolenanwendung oder LINQPad eingefügt werden kann.

%Vor%

Noch einmal: Sie sollten dies wahrscheinlich nicht anstelle von einfachen Null-Tests verwenden, weil es eine komplexe -Konvertierung enthält, aber es ist ein interessantes Muster.

    
Tim Medora 22.04.2014 22:32
quelle
0

.NET Fiddle

Wie gesagt, gibt es einen Plan, dass c # 6.0 den Operator ? implementiert, um diesen Prozess etwas zu erleichtern. Wenn Sie nicht warten können, würde ich vorschlagen, einen Lambda-Ausdruck und eine einfache Hilfsfunktion zu verwenden, um dies zu lösen.

%Vor%

Dies könnte verwendet werden int value = NestedProperty<First,int>(blank,f => f.Second.Third.id); wie in der Demo unten gezeigt

Programm

%Vor%

einfache Demostruktur

%Vor%     
Travis J 13.06.2014 17:42
quelle
0

Seit 3.5 (vielleicht früher) können Sie eine sehr einfache Erweiterungsmethode schreiben

%Vor%

Sie können diese Methode noch kürzer nennen und dann wie folgt verwenden

%Vor%

Also Quellklassen sind:

%Vor%     
Roma Borodov 04.12.2015 10:33
quelle

Tags und Links