Система C#.Ошибка NullReferenceException Google Calendar [дубликат]


На этот вопрос уже есть ответ здесь:

У меня есть программа, в которой я продолжаю получать ошибку NullReferenceException. Вот код, который вызывает ошибку:

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

Я просмотрел этот пост (Что такое NullReferenceException и как это исправить это?), и я попробовал несколько решений (боюсь, что я просто не понимаю все из них достаточно, чтобы попробовать их), но я просто не могу понять, почему это происходит. В моем понимании, эта ошибка возникает потому, что строка на самом деле null.

В моем Календаре Google есть события, которые не имеют введенного описания, поэтому описание равно нулю, но разве код, который у меня есть, не должен проверять это и обрабатывать его? Или, есть проблема, что eventItem.Описание.ToString() не может быть null когда я вызываю метод IsNullOrEmpty? Я также попытался изменить оператор if следующим образом:

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

...но я все равно получаю ошибку NRE. Я пытался переписать свой код так много разных способов, но ничего не получалось. Я на пределе своих возможностей!

2 2

2 ответа:

Ваш eventItem сам может быть нулевым. Сделайте что-нибудь по линиям

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

Обновлено после того, как Дстэнли указал в комментарии, что .Сравнение ToString () = = null было бы излишним.

if ( eventItem!= null && eventItem.Description != null)
{
}
Просто чтобы помочь вам понять немного лучше... NullReferenceException в основном означает, что вы пытаетесь использовать какой-то объект без его создания. Один из самых простых способов предотвратить это-добавить проверку null, если вы не уверены, не является ли объект null. И когда я говорю добавить нуль проверьте, это просто означает сравнение с null в блоке if перед обращением к любому свойству объекта.
if( objectName != null)
{
//then do something on the object

}

Разве код, который у меня есть, не должен проверить это и справиться с этим?

Нет, если item или item.Description равно null. Если item равно null, то вызов .Description вызовет исключение нулевой ссылки, а если item.Description равно null, то вызов ToString вызовет исключение нулевой ссылки. Нет никакой "магии", которая позволяет вызывать ToString по нулевой ссылке.

Обратите внимание, что если item.Description уже является строкой, то нет необходимости вызывать ToString(). просто сделайте:
if (string.IsNullOrEmpty(eventItem.Description))
{
     description = "No description available.";
}
else
{                        
     description = eventItem.Description;  
}