2011-11-21 141 views
67

Sigo recibiendo este error cuando ejecuto el programa.Referencia de objeto no establecida en una instancia de un objeto.

Referencia de objeto no establecida en una instancia de un objeto. Descripción: Se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código. Detalles de excepción: System.NullReferenceException: referencia de objeto no establecida en una instancia de un objeto.

Source Error: 

Line with error: 

Line 156:  if (strSearch == "" || strSearch.Trim().Length == 0) 

Cuál es la forma correcta debe ser escrito?

+0

agregar caso if (strSearch! = Null)? – ToddBFisher

+0

el error indica que un objeto es nulo. O strSearch es nulo o el resultado de strSearch.Trim() es nulo. Para verificar, usa la respuesta de Graphain usando IsNullOrWhitespace. – Russell

Respuesta

93

La forma correcta en .NET 4.0 es:

if (String.IsNullOrWhiteSpace(strSearch)) 

El método String.IsNullOrWhiteSpace usado anteriormente es equivalente a:

if (strSearch == null || strSearch == String.Empty || strSearch.Trim().Length == 0) 
// String.Empty is the same as "" 

de referencia para el método IsNullOrWhiteSpace

http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx

Indica si una cadena especificada es Nothing, empty o consiste en solo de espacios en blanco.

En versiones anteriores, se puede hacer algo como esto:

if (String.IsNullOrEmpty(strSearch) || strSearch.Trim().Length == 0) 

El método String.IsNullOrEmpty utilizado anterior es equivalente a:

if (strSearch == null || strSearch == String.Empty) 

Lo que significa que todavía tiene que comprobar si hay su caso "IsWhiteSpace" con el .Trim().Length == 0 según el ejemplo.

de referencia para el método IsNullOrEmpty

http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx

Indica si la cadena especificada es nada o es una cadena vacía.

Explicación:

Usted necesita asegurarse de strSearch (o cualquier variable para el caso) no es null antes de eliminar la referencia mediante el carácter de punto (.) - es decir, antes de hacer strSearch.SomeMethod() o strSearch.SomeProperty se necesita verificar que strSearch != null.

En el ejemplo, usted quiere asegurarse de que su cadena tiene un valor, lo que significa que quiere asegurarse de la cadena:

  • no es nulo
  • no es la cadena vacía (String.Empty/"")
  • no es sólo un espacio en blanco

En los casos anteriores, se debe poner el "¿es nula?" caso primero, por lo que no comprueba los otros casos (y error) cuando la cadena es null.

+1

Falta el cierre) del if –

+0

+1. Pero eso es solo .Net 4.0 o superior. –

+1

Es bueno tener un método de extensión de clase para hacer esta comprobación: public static IsEmptyOrWhiteSpace (este valor de cadena) { return String.IsEmptyOrWhiteSpace (valor); – MrSnowflake

4

strSearch en este caso es probablemente nulo (no simplemente vacío).

Intente utilizar

String.IsNullOrEmpty(strSearch)

si usted está tratando de determinar si la cadena no tiene ningún contenido.

+0

Esto no ayuda si su cadena contiene espacios en blanco. –

+0

La pregunta original estaba buscando una cadena de longitud 0, por lo que estrictamente sería un requisito ligeramente diferente. –

+0

@Handsome Cam: ahora recibo un error en esta línea. Creo que no está redactado correctamente. string strSearch = Request ["txtSearchName"]. ToString(); – Mike

21

Todas las versiones de .Net:

if (String.IsNullOrEmpty(strSearch) || strSearch.Trim().Length == 0) 

.Net 4.0 o posterior:

if (String.IsNullOrWhitespace(strSearch)) 
1

quiero extender la respuesta de MattMitchell diciendo que puede crear un método de extensión para esta funcionalidad:

public static IsEmptyOrWhitespace(this string value) { 
    return String.IsEmptyOrWhitespace(value); 
} 

Esto hace posible llamar:

string strValue; 
if (strValue.IsEmptyOrWhitespace()) 
    // do stuff 

Para mí esto es mucho más limpio que llamar a la función estática String, sin dejar de ser seguro para NullReference.

3

Sé que esto fue publicado hace aproximadamente un año, pero esto es para los usuarios para referencia futura.

Me encontré con un problema similar. En mi caso (intentaré ser breve, por favor hágamelo saber si desea más detalles), estaba tratando de verificar si una cadena estaba vacía o no (la cadena es el tema de un correo electrónico). Siempre devolvió el mismo mensaje de error sin importar lo que hice. Sabía que lo estaba haciendo bien, pero seguía arrojando el mismo mensaje de error. Entonces me di cuenta de que, estaba comprobando si el tema (cadena) de un correo electrónico (instancia/objeto), qué pasa si el correo electrónico (instancia) ya era nulo en primer lugar. ¿Cómo podría verificar el asunto de un correo electrónico, si el correo electrónico ya es nulo ... revisé si el correo electrónico estaba vacío, funcionó bien.

mientras buscaba el tema (cadena) utilicé los métodos IsNullorWhiteSpace(), IsNullOrEmpty().

if (email == null) 
{  
    break;  
} 
else 
{  
    // your code here  
} 
+0

Debido a un cortocircuito, puede tener algo como 'if (email == null || email.subject.IsNullOrWhiteSpace()) {....', y debería manejar la parte null del correo electrónico muy bien –

Cuestiones relacionadas