Me gustaría evitar un mayor procesamiento en un objeto si es nulo.
En el siguiente código verifico si el objeto es nulo por cualquiera de los dos:
if (!data.Equals(null))
y
if (data != null)
Sin embargo, recibo un NullReferenceException
at dataList.Add(data)
. Si el objeto era nulo, ¡nunca debería haber ingresado en la if
declaración!
Por lo tanto, pregunto si esta es la forma correcta de verificar si un objeto es nulo:
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;
}
Si esta es la forma correcta de verificar si el objeto es nulo, ¿qué estoy haciendo mal (¿cómo puedo evitar un mayor procesamiento en el objeto para evitar la NullReferenceException)?
!= null
en sus cheques nulos. .Equals
siempre lanzará una excepción si el objeto es nulo.
throw e;
no es mucho mejor. throw;
, por otro lado ...
e.ToString()
producirá una cadena que incluye no solo el mensaje de error, sino también los de todos InnerExceptions
y el seguimiento de la pila. Entonces ese es un tipo de mensaje de excepción muy pesado. Si usted (¡con razón!) Desea preservar esta información y mantenerla donde pertenece, úsela simplemente throw;
.
throw e;
versusthrow new Exception(e.ToString());