Система 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 ответа:
Ваш
eventItem
сам может быть нулевым. Сделайте что-нибудь по линиямif ( eventItem!= null && eventItem.Description != null && eventItem.Description.ToString() == null)
Обновлено после того, как Дстэнли указал в комментарии, что .Сравнение ToString () = = null было бы излишним.
Просто чтобы помочь вам понять немного лучше... NullReferenceException в основном означает, что вы пытаетесь использовать какой-то объект без его создания. Один из самых простых способов предотвратить это-добавить проверку null, если вы не уверены, не является ли объект null. И когда я говорю добавить нуль проверьте, это просто означает сравнение с null в блоке if перед обращением к любому свойству объекта.if ( eventItem!= null && eventItem.Description != null) { }
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; }