2013-02-20 9 views
15

Esiste un modo migliore (più bello) per scrivere questa istruzione if?Controllo di più string per null in un'istruzione if

if(string1 == null && string2 == null && string3 == null && string4 == null && string5 == null && string6 == null){...} 
+1

se (String.IsNullOrWhiteSpace (string1) && ...-> quindi non solo controlli le stringhe null, ma anche quelle vuote e alcune contenenti solo spazi – Offler

+3

Hai davvero bisogno di così tante variabili stringa separate? Non puoi creare un array o un elenco di stringhe e usarlo invece? Molto probabilmente semplificherà anche molte altre operazioni. –

+1

Con le informazioni che hai dato, no, non proprio (suppongo che tu possa infrangerle su più righe se questo ti aiuta), ma @JohnWillemse indica il punto. Se hai bisogno di molte variabili stringa, forse devi pensare di utilizzare una struttura dati diversa che possa incapsulare questa logica. –

risposta

31

Forse usando il null-coalescing operator(??):

if((string1 ?? string2 ?? string3 ?? string4 ?? string5 ?? string6) == null){ ;} 

Se tutte le stringhe sono in una raccolta è possibile utilizzare Linq:

bool allNull = strings.All(s => s == null); 
3
string[] strs = new string[] { string1, string2, string3 }; 
if(strs.All(str => string.IsNullOrEmpty(str)) 
{ 
    //Do Stuff 
} 

Oppure utilizzare strs.All(str => str == null) se non si vuole verificare la presenza di stringhe vuote.

14

Si potrebbe mettere tutte le stringhe in un elenco e utilizzare

if(listOfStrings.All(s=>s==null)) 

Per lo meno si può mettere su più righe

if(string1 == null 
    && string2 == null 
    && string3 == null 
    && string4 == null 
    && string5 == null 
    && string6 == null) 
{...} 
+0

ho usato '||' invece di '&&' per superare tra il valore nullo – stom

+0

@stom Cosa intendete per "tra valore nullo"? Se usi '||' invece di '&&' otterrai almeno un valore è nullo invece di tutti i valori sono nulli. – juharr

3

Fai un IEnumerable di stringhe (lista o array. ...), quindi è possibile utilizzare .All()

var myStrings = new List<string>{string1,string2,string3....}; 
if(myStrings.All(s => s == null)) 
{ 
    //Do something 
} 
+2

Oppure in una singola riga ... 'if (Enumerable.All (nuova stringa [] {str1, str2, str3, str4}, s => s == null))' –

+0

@JimMischel: crea una raccolta aggiuntiva solo abbreviare una valutazione. A proposito, non lo accorcia nemmeno veramente. –

+0

@TimSchmelter: Sì, crea una raccolta aggiuntiva, così come la risposta che hai upvoted. –

1

Questo dovrebbe fare lo stesso:

if (string.IsNullOrEmpty(string1 + string2 + string3 + string4 + string5 + string6)){...} 
+3

Questo restituirà True se sono vuoti e non solo null. – Igoy

+0

Basta usare 'string.IsNullOrWhiteSpace' per risolvere il problema di cui sopra e la sua torta. Adoro questo approccio. – kuskmen

1

Beh, non so se è più bello o meglio, oppure no, è possibile utilizzare il metodo IEnumerable.Any come Questo;

Determina se una sequenza contiene elementi.

List<string> list = new List<string>{"string1","string2","string3", "string4", "string5"}; 
if(list.Any(n => n == null)) 
{ 

} 

Ed è possibile utilizzare Enumerable.All() metodo come;

Determina se tutti gli elementi di una sequenza soddisfano una condizione.

if (Enumerable.All(new string[] { string1, string2, string3, string4, string5 }, s => s == null)) 
{ 
     Console.WriteLine("Null"); 
} 
2

Nel caso in cui si desidera controllare nulla o vuoto, qui è un altro modo senza array:

if (string.Concat(string1, string2, string3, string4, string5).Length == 0) 
{ 
    //all null or empty! 
} 
+0

Non controlla se tutti sono nulli, come con la risposta di Dennisch. –

+0

@Tim è vero, post modificato per riflettere questo. –

10

Se hai fatto una funzione come questa:

public static bool AllNull(params string[] strings) 
{ 
    return strings.All(s => s == null); 
} 

Quindi puoi chiamare così:

if (AllNull(string1, string2, string3, string4, string5, string6)) 
{ 
    // ... 
} 

In realtà, si potrebbe cambiare AllNull() per lavorare con qualsiasi tipo di riferimento, in questo modo:

public static bool AllNull(params object[] objects) 
{ 
    return objects.All(s => s == null); 
} 
Problemi correlati