2012-01-16 5 views
6

IsNullOrEmpty se utiliza con cadenas para comprobar si una cadena es nula o está vacía. ¿Hay un equivalente con un objeto para ver si algún objeto es nulo o no? Asumo que podemos hacerIsNullOrEmpty con el objeto

obj1 != null 

pero no está seguro si hay alguna otra manera ...

+0

¿Quiere decir, como, una manera más simple? ... – GSerg

+2

¿cómo puede algo ser más simple? – BrokenGlass

+0

Lo que creo que está preguntando es, "si no sabemos si un objeto no nulo es una cadena o no, ¿cuál es la mejor manera?" string.IsNullOrEmpty() barf en un objeto que no sea de cadena. – bwperrin

Respuesta

9

una cadena nula es nulo, es una cadena vacía ""

isNullOrEmpty requiere un profundo conocimiento acerca de la implementación de una cadena. Si quiere uno, puede escribir uno usted mismo para su objeto, pero tiene que hacer su propia definición de si su objeto está "vacío" o no.

pregúntese: ¿Qué significa que un objeto esté vacío?

+5

Si no tiene propiedades/valores ... Puede suceder, es la razón de mi búsqueda de Google en este momento. Esta publicación me dio esperanza por un segundo. : -/ – RJB

+0

@RJB qué quiere decir con "eso" cuando dijo '" puede suceder "' –

+0

Para ser específico, es una biblioteca de lector de Excel de terceros que analiza cada valor de celda en un objeto dentro de un DataSet. Si la celda está en blanco, el objeto está vacío: {}, y {} == null devuelve falso. – RJB

0

¿Por qué necesitaría alguna otra forma? Comparar una referencia Object con null es la forma menos verídica de comprobar si es nula.

7
obj1 != null 

es la manera correcta.

cadena define IsNullOrEmpty como una forma más agradable que decir

obj1 == null || obj == String.Empty 

lo que hace más que comprobar la nulidad.

Puede haber otras clases que definan un método para buscar un objeto sematicamente "en blanco o nulo", pero eso dependería de la semántica de la clase, y de ninguna manera es universal.

También es posible crear un método de extensión para hacer este tipo de cosas si ayuda a la legibilidad de su código. Por ejemplo, un enfoque similar a las colecciones:

public static bool IsNullOrEmpty (this ICollection collection) 
{ 
    return collection == null || collection.Count == 0; 
} 
0

IsNullOrEmpty es esencialmente la abreviatura de lo siguiente:

return str == null || str == String.Empty; 

lo tanto, no hay ninguna función que simplemente comprueba si hay valores nulos, ya que sería demasiado simple. obj != null es la forma correcta. Sin embargo, puede crear un (superfluo) esa función por sí mismo utilizando la siguiente extensión:

public bool IsNull(this object obj) 
{ 
    return obj == null; 
} 

entonces usted es capaz de ejecutar anyObject.IsNull().

+0

'return str == null || str == ""; ', ¿seguro? De lo contrario, me llevan a suponer que 'obj' es un' objeto' en lugar de 'cadena', lo que haría' obj == "' 'una comparación de referencia involuntaria. – hvd

+0

@hvd 'obj' y' str' son solo ** nombres **. Justin podría haber usado 'aReallyLongNameForSomething' o' example'. – ChrisF

+0

@ChrisF Sé que puedes ponerle nombre a tus variables 'string'' obj', pero no es algo que haya visto nunca hecho intencionalmente. Lo señalé porque cometí el error de hacer comparaciones de referencia involuntaria yo mismo. – hvd

1

El siguiente código es perfectamente bien y de la manera correcta (más exacta, concisa y clara) para comprobar si un objeto es null:

object obj = null; 

//... 

if (obj == null) 
{ 
    // Do something 
} 

String.IsNullOrEmpty es un método existente para la conveniencia para que no tienen que escribir el código de comparación de sí mismo:

private bool IsNullOrEmpty(string input) 
{ 
    return input == null || input == string.Empty; 
} 

Además, hay un método String.IsNullOrWhiteSpace la comprobación de un null nd espacios en blanco, como espacios, etc. pestañas

+0

Y si solo hubiera un objeto. Vacío .... – RJB

+2

Eche un vistazo a ['Optional'] (https://github.com/mariusschulz/MiniMods/blob/master/MiniMods/Optional/Optional.cs) o el * Quizás mónada * en general. –

5

Encontré que los valores DataGridViewTextBox y algunos objetos JSON no son iguales a Null pero en su lugar son valores "{}". Comparándolos con Null no funciona, pero el uso de estos hacen el truco:

if (cell.Value is System.DBNull) 

if (cell.Value == System.DBNull.Value) 

Un buen fragmento que encontré sobre la diferencia entre DBNull nulo y:

No hay que confundir la noción de null en una lenguaje de programación orientado a objetos con un objeto DBNull. En un lenguaje de programación orientado a objetos, null significa la ausencia de una referencia a un objeto. DBNull representa una variante no inicializada o una columna de base de datos inexistente.

Puedes obtener más información sobre DBNull class here.

Cuestiones relacionadas