2016-11-02 1 views
0

Ich habe diese Zeile:Null Referenz Ausnahme in FirstOrDefault C#

myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value; 

Manchmal führen nicht „Ada Nein“ hat und ich

Objektverweis nicht auf eine Instanz eines Objekts festgelegt .

Ich schrieb eine if-Anweisung NULL-Verweis Ausnahme zu vermeiden:

if(result.FirstOrDefault(m => m.Name == "Ada No").Value != null) 
{ 
    myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value; 
} 

Aber es entweder nicht funktioniert hat. Wie kann ich diese Ausnahme in diesem Codeabschnitt vermeiden? Wie kann ich schreiben, wenn Ada No existiert, Arbeit, wenn nicht nicht funktioniert? Vielen Dank.

Antwort

7

gibt null zurück, wenn kein Objekt vorhanden ist, das die Bedingung erfüllt. Und die Ausnahme wird ausgelöst, wenn der Code versucht, auf ein Member einer Referenztypvariablen zuzugreifen, die auf null gesetzt ist. Daher müssen Sie überprüfen, ob der Wert des Objekts null ist oder nicht, bevor Sie darauf zugreifen.

Sie können null-Propagation-Operator verwenden, wenn Sie C# 6.0 verwenden:

myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No")?.Value; 

Oder wenn Sie ältere Versionen verwenden:

var firstObj = result.FirstOrDefault(m => m.Name == "Ada No"); 

if(firstObj != null) 
{ 
    myobject.Ada = firstObj.Value; 
} 
+0

ich FirstOrDefault nicht denken ist derjenige, der NullReferenceException auslöst. Ich denke, dieses Ergebnis ist der, der null ist. – Poody

2

Die andere Lösung wäre mit jedem zu überprüfen, ob Jedes Mitglied besteht aus Name gleich "Ada No"

Beachten Sie, dass result auch nicht null ist!

Aber die Nullausbreitungs Weg wäre weniger zu schreiben, so dass es hängt von Ihnen bevorzugt, wie Sie Ihren Code lesen wollen, und wenn es einige Performance-kritische Stück Code

if(result != null && result.Any(m => m.Name == "Ada No")) 
{ 
    myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value; 
} 
Verwandte Themen