2011-11-21 15 views
67

Continuo a ricevere questo errore quando eseguo il programma.Riferimento oggetto non impostato su un'istanza di un oggetto.

Riferimento oggetto non impostato su un'istanza di un oggetto. Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Rivedere la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice. Dettagli eccezione: System.NullReferenceException: riferimento oggetto non impostato su un'istanza di un oggetto.

Source Error: 

Line with error: 

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

Qual è il modo corretto dovrebbe essere scritto?

+0

aggiungere caso se (strSearch! = Null)? – ToddBFisher

+0

l'errore indica che un oggetto è nullo. O strSearch è nullo o il risultato di strSearch.Trim() è nullo. Per verificare, utilizzare la risposta di Graphain utilizzando IsNullOrWhitespace. – Russell

risposta

93

Il modo corretto NET 4.0 è:

if (String.IsNullOrWhiteSpace(strSearch)) 

Il metodo utilizzato String.IsNullOrWhiteSpace sopra è equivalente a:

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

Domanda metodo IsNullOrWhiteSpace

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

Indica se una stringa specificata è Niente, vuota o costituita da solo di caratteri spazi bianchi.

Nelle versioni precedenti, si potrebbe fare qualcosa di simile:

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

Il metodo String.IsNullOrEmpty utilizzato sopra è equivalente a:

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

Il che significa che è ancora necessario per verificare la presenza di il tuo caso "IsWhiteSpace" con .Trim().Length == 0 come nell'esempio.

di riferimento per il metodo IsNullOrEmpty

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

Indica se la stringa specificata è Nothing o una stringa vuota.

Spiegazione:

È necessario assicurarsi strSearch (o qualsiasi variabile per quella materia) non null prima di voi è dereferenziarlo usando il carattere punto (.) - vale a dire prima di fare strSearch.SomeMethod() o strSearch.SomeProperty voi è necessario verificare che strSearch != null.

Nel tuo esempio si vuole fare in modo la stringa ha un valore, il che significa che si vuole garantire la stringa:

  • non è nullo
  • non è una stringa vuota (String.Empty/"")
  • non è solo spazi bianchi

Nei casi di cui sopra, è necessario mettere il "è nulla?" In primo luogo, quindi non controlla gli altri casi (ed errori) quando la stringa è null.

+1

Manca la chiusura) del se –

+0

+1. Ma questo è solo .Net 4.0 o superiore. –

+1

È utile disporre di un metodo Extension per eseguire questo controllo: public static IsEmptyOrWhiteSpace (questo valore stringa) { return String.IsEmptyOrWhiteSpace (valore); – MrSnowflake

4

strSearch in questo caso è probabilmente nullo (non semplicemente vuoto).

Provare a utilizzare

String.IsNullOrEmpty(strSearch)

se si sta solo cercando di determinare se la stringa non ha alcun contenuto.

+0

Questo non aiuta se la sua stringa contiene spazi vuoti. –

+0

La domanda originale stava cercando una stringa di lunghezza 0, quindi rigorosamente sarebbe un requisito leggermente diverso. –

+0

@Home Cam: ora sto ricevendo un errore su questa linea. Penso che non sia formulato correttamente. string strSearch = Request ["txtSearchName"]. ToString(); – Mike

21

Tutte le versioni di .Net:

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

.Net 4.0 o versione successiva:

if (String.IsNullOrWhitespace(strSearch)) 
1

voglio estendere la risposta di MattMitchell dicendo è possibile creare un metodo di estensione per questa funzionalità:

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

Ciò consente di chiamare:

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

Per me è molto più pulito che chiamare la funzione statica String, pur rimanendo NullReference sicuro!

3

So che questo è stato pubblicato circa un anno fa, ma questo è per gli utenti per riferimento futuro.

Mi sono imbattuto in un problema simile. Nel mio caso (cercherò di essere breve, per favore fatemi sapere se volete maggiori dettagli), stavo cercando di verificare se una stringa era vuota o meno (la stringa è oggetto di una e-mail). Ha sempre restituito lo stesso messaggio di errore, non importa quello che ho fatto. Sapevo che lo stavo facendo bene, ma continuava a lanciare lo stesso messaggio di errore. Poi mi resi conto che stavo controllando se l'oggetto (stringa) di un'e-mail (istanza/oggetto), e se l'e-mail (istanza) fosse già nulla al primo posto. Come posso verificare per un oggetto di una e-mail, se l'e-mail è già nullo .. ho controllato se l'e-mail era vuota, ha funzionato bene.

durante il controllo dell'oggetto (stringa) ho utilizzato i metodi IsNullorWhiteSpace(), IsNullOrEmpty().

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

A causa del cortocircuito, si può avere qualcosa come 'if (email == null || email.subject.IsNullOrWhiteSpace()) {....', e dovrebbe gestire la parte di email null bene –

Problemi correlati