Я хотів би запобігти подальшій обробці об’єкта, якщо він є нульовим.
У наступному коді я перевіряю, чи об’єкт недійсний будь-яким:
if (!data.Equals(null))
і
if (data != null)
Однак я отримую NullReferenceException
ат dataList.Add(data)
. Якщо об’єкт був недійсним, він ніколи не повинен був навіть входити до if
повідомлення!
Таким чином, я запитую, чи це правильний спосіб перевірити, чи об’єкт недійсний:
public List<Object> dataList;
public bool AddData(ref Object data)
bool success = false;
try
{
// I've also used "if (data != null)" which hasn't worked either
if (!data.Equals(null))
{
//NullReferenceException occurs here ...
dataList.Add(data);
success = doOtherStuff(data);
}
}
catch (Exception e)
{
throw new Exception(e.ToString());
}
return success;
}
Якщо це правильний спосіб перевірити, чи об’єкт недійсний, що я роблю неправильно (як я можу запобігти подальшій обробці об’єкта, щоб уникнути NullReferenceException)?
!= null
у своїх нульових чеках. .Equals
завжди буде кидати виняток, якщо об’єкт є нульовим.
throw e;
не набагато краще. throw;
, з іншого боку ...
e.ToString()
створить рядок, що включає не тільки повідомлення про помилку, але й всі з них InnerExceptions
і слід стека. Отже, це якесь дуже жирне повідомлення про виключення. Якщо ви (справедливо!) Хочете зберегти цю інформацію та зберігати там, де вона належить, використовуйте просто throw;
.
throw e;
протиthrow new Exception(e.ToString());