2016-04-01 10 views
2

Ich habe ein Programm, in dem ich den NullReferenceException Fehler erhalten. Hier ist der Code, der den Fehler verursacht:C# System.NullReferenceException Fehler Google Kalender

string description = ""; 
if (string.IsNullOrEmpty(eventItem.Description.ToString())) 
{ 
    description = "No description available."; 
} 
else 
{       
    description = eventItem.Description.ToString(); 
} 

ich durch diesen Beitrag ausgesehen haben (What is a NullReferenceException and how do I fix it?), und ich habe einige der Lösungen ausprobiert (ich fürchte, ich verstehe einfach nicht alle von ihnen genug um sie zu versuchen), aber ich kann einfach nicht herausfinden, warum das passiert. Nach meinem Verständnis tritt dieser Fehler auf, weil die Zeichenfolge tatsächlich null ist.

Es gibt Ereignisse in meinem Google Kalender, die keine Beschreibung enthalten, daher ist die Beschreibung null, aber sollte der Code, den ich dafür habe, nicht überprüft werden? Oder ist das Problem, dass eventItem.Description.ToString() nicht null sein kann, wenn ich die IsNullOrEmpty-Methode aufruft? Ich habe auch versucht, die if-Anweisung zu ändern:

if (eventItem.Description.ToString() == null) 

... aber ich bekomme immer noch die NRE-Fehler. Ich habe versucht, meinen Code so viele verschiedene Arten neu zu schreiben, aber nichts hat funktioniert. Ich bin am Ende meines Seils!

Antwort

1

Ihre eventItem selbst kann null sein. Tun Sie etwas entlang der Linien

if (eventItem!= null && eventItem.Description != null && eventItem.Description.ToString() == null) 

Aktualisiert nach DStanley im Kommentar darauf hingewiesen, dass .ToString() == null Vergleich unnötig wäre.

if (eventItem!= null && eventItem.Description != null) 
{ 
} 

Nur du ein wenig besser verstehen zu helfen, ... Nullreferenceexception im Grunde bedeutet, dass Sie ohne Instanziierung es einige Objekt zu verwenden versuchen. Eine der einfachsten Methoden zum Verhindern ist das Hinzufügen einer Nullprüfung, wenn Sie nicht sicher sind, ob das Objekt nicht null ist. Und wenn ich sage, dass ich einen Null-Test hinzufüge, bedeutet das einfach, vor dem Zugriff auf eine Eigenschaft des Objekts im if-Block mit null zu vergleichen.

if(objectName != null) 
{ 
//then do something on the object 

} 
+3

Oder 'eventItem.Description' könnte null sein. –

+0

Ja. Danke, Jack. Ich habe die Antwort aktualisiert. Ohne die Informationen, die Sie angegeben haben, ist der Fehler möglicherweise noch aufgetreten. – NoSaidTheCompiler

+1

'ToString' gibt für keine Framework-Typen null zurück. Wenn 'Description' nicht ein benutzerdefinierter Typ ist, der' ToString' überlädt, um 'null' für einen gültigen Wert zurückzugeben (was sehr merkwürdig wäre), ist die Prüfung auf' ToString' nicht notwendig. –

0

shouldn't the code I have check for that, and handle it?

Nicht, wenn item oder item.Description ist null. Wenn item null ist, wird der Aufruf an .Description eine Null-Referenzausnahme auslösen, und wenn item.Description Null ist, wird der Aufruf an ToString eine Null-Referenzausnahme auslösen. Es gibt keine "Magie", die Sie ToString auf eine Nullreferenz aufrufen kann.

Beachten Sie, dass, wenn item.Description bereits eine Zeichenfolge ist, kein Aufruf von ToString() erforderlich ist. tun Sie einfach:

if (string.IsNullOrEmpty(eventItem.Description)) 
{ 
    description = "No description available."; 
} 
else 
{       
    description = eventItem.Description; 
} 
+0

Wenn 'eventItem.Description' wieder null ist, wird dieselbe Ausnahme ausgelöst; da '.ToString()' wird 'null' in' "" ' –

+0

@ un-lucky nicht konvertieren Danke - Ich habe vergessen, diesen Teil meiner Antwort zu bearbeiten. –

+0

Möchten Sie nicht das Objekt 'eventItem' auf Null prüfen, bevor Sie auf die Eigenschaft 'Description' zugreifen? – NoSaidTheCompiler