2012-01-16 8 views
6

IsNullOrEmpty viene utilizzato con le stringhe per verificare se una stringa è nullo o vuota. Esiste un equivalente con un oggetto per vedere se qualche oggetto è nullo o no? Presumo che possiamo fareIsNullOrEmpty con oggetto

obj1 != null 

ma non è sicuro se c'è qualche altro modo ...

+0

Vuoi dire, come, un modo più semplice? .. – GSerg

+2

come può essere tutto più semplice? – BrokenGlass

+0

Quello che penso stia chiedendo è "se non sappiamo se un oggetto non nullo è una stringa o no, qual è il modo migliore?" string.IsNullOrEmpty() barf su un oggetto non stringa. – bwperrin

risposta

9

una stringa nulla è nullo, una stringa vuota è ""

IsNullOrEmpty richiede una comprensione intima sull'implementazione di una stringa. Se ne vuoi uno, puoi scriverne uno per il tuo oggetto, ma devi definire la tua definizione per stabilire se il tuo oggetto è "vuoto" o meno.

chiediti: cosa vuol dire che un oggetto è vuoto?

+5

Se non ha proprietà/valori .... Può succedere, è la ragione della mia ricerca Google in questo momento. Questo post mi ha dato speranza per un secondo. : -/ – RJB

+0

@ RJB cosa intendi con "it" quando hai detto "può succedere"? –

+0

Per essere precisi, si tratta di una libreria di lettori Excel di terze parti che analizza ogni valore di cella in un oggetto all'interno di un DataSet. Se la cella è vuota, l'oggetto è vuoto: {} e {} == null restituisce false. – RJB

0

Perché si ha bisogno di alcun altro modo? Il confronto di un riferimento Object con null è il modo meno verboso per verificare se è null.

7
obj1 != null 

è il modo giusto.

String definisce IsNullOrEmpty come un modo comodo per dire

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

quindi non si limita a controllare nullità.

Ci possono essere altre classi che definiscono un metodo per controllare un oggetto sematically "vuoto o nullo", ma ciò dipenderà semantica della classe, e non è affatto universale.

È anche possibile creare un metodo di estensione per fare questo genere di cose se aiuta la leggibilità del codice. Ad esempio, un approccio simile alle collezioni:

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

IsNullOrEmpty è essenzialmente una scorciatoia per il seguente:

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

Quindi, non v'è alcuna funzione che solo controlla la presenza di valori nulli perché sarebbe troppo semplice. obj != null è il modo corretto. Ma è possibile creare un tale (superfluo) la funzione da soli, usando la seguente estensione:

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

allora siete in grado di eseguire anyObject.IsNull().

+0

'return str == null || str == ""; ', sicuramente? Altrimenti, sono portato ad assumere che 'obj' sia un 'oggetto' piuttosto che una' stringa', il che renderebbe 'obj ==" "' un confronto di riferimento non voluto. – hvd

+0

@hvd 'obj' e' str' sono solo ** nomi **. Justin avrebbe potuto usare 'aReallyLongNameForSomething' o' example'. – ChrisF

+0

@ChrisF So che è possibile denominare le variabili 'stringa'' obj', ma non è qualcosa che abbia mai visto intenzionalmente. L'ho fatto notare perché ho commesso l'errore di fare confronti di riferimento non intenzionali. – hvd

1

Il seguente codice è perfettamente bene e il modo giusto (più precisa, concisa e chiara) per verificare se un oggetto è null:

object obj = null; 

//... 

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

String.IsNullOrEmpty è un metodo esistente per comodità in modo da non c'è bisogno di scrivere il codice di confronto da soli:

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

Inoltre, v'è un metodo String.IsNullOrWhiteSpace controllando null un nd caratteri di spazio bianco, come spazi, tabulazioni ecc

+0

E se solo ci fosse un oggetto.Empty .... – RJB

+2

Dai un'occhiata a ['Optional'] (https://github.com/mariusschulz/MiniMods/blob/master/MiniMods/Optional/Optional.cs) o il * Forse monade * in generale. –

5

Ho trovato che i valori DataGridViewTextBox e alcuni oggetti JSON non sono uguali a Null ma sono invece valori "{}". confrontandole con Null non funziona, ma utilizzando questi fanno il trucco:

if (cell.Value is System.DBNull) 

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

Un buon brano che ho trovato per quanto riguarda la differenza tra NULL e DBNull:

Non confondere il concetto di null in un linguaggio di programmazione orientato agli oggetti con un oggetto DBNull. In un linguaggio di programmazione orientato agli oggetti, null indica l'assenza di un riferimento a un oggetto. DBNull rappresenta una variante non inizializzata o una colonna di database inesistente.

Ulteriori informazioni su DBNull class here.