Chciałbym zapobiec dalszemu przetwarzaniu obiektu, jeśli jest on pusty.
W poniższym kodzie sprawdzam, czy obiekt jest pusty przez:
if (!data.Equals(null))
i
if (data != null)
Jednak mogę otrzymać NullReferenceException
na dataList.Add(data)
. Jeśli obiekt był zerowy, nigdy nie powinien był nawet wejść do if
-statement!
Dlatego pytam, czy to jest właściwy sposób sprawdzenia, czy obiekt jest pusty:
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;
}
Jeśli jest to właściwy sposób sprawdzania, czy obiekt ma wartość null, co robię źle (jak mogę zapobiec dalszemu przetwarzaniu obiektu, aby uniknąć wyjątku NullReferenceException)?
!= null
w swoich zerowych czekach. .Equals
zawsze zgłasza wyjątek, jeśli obiekt jest pusty.
throw e;
nie jest dużo lepszy. throw;
, z drugiej strony ...
e.ToString()
wygeneruje ciąg znaków, który zawiera nie tylko komunikat o błędzie, ale także wszystkie InnerExceptions
i ślad stosu. To rodzaj bardzo grubego komunikatu wyjątku. Jeśli (słusznie!) Chcesz zachować te informacje i zachować je tam, gdzie należy, użyj po prostu throw;
.
throw e;
versusthrow new Exception(e.ToString());