2013-02-20 3 views
15

Existe-t-il une meilleure façon (plus agréable) d'écrire cette instruction if?Vérification de plusieurs chaînes pour null dans une instruction if

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

si (String.IsNullOrWhiteSpace (string1) && ...-> pour que vous ne vérifiiez pas seulement les chaînes vides, mais aussi celles vides et celles contenant seulement des espaces – Offler

+3

Avez-vous vraiment besoin de tant de variables de chaînes séparées? Ne pouvez-vous pas faire un tableau ou une liste de chaînes et l'utiliser à la place? Cela simplifiera probablement beaucoup d'autres opérations. –

+1

Avec l'information que vous avez donnée, non, pas vraiment (je suppose que vous pouvez le casser sur plusieurs lignes si cela vous aide), mais le point @JohnWillemse reste. Si vous avez besoin de nombreuses variables de chaîne, vous devez peut-être penser à utiliser une structure de données différente qui peut encapsuler cette logique. –

Répondre

31

peut-être à l'aide du null-coalescing operator(??):

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

Si toutes les chaînes sont dans une collection, vous pouvez utiliser 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 
} 

Ou utilisez strs.All(str => str == null) si vous ne voulez pas vérifier les chaînes vides.

14

Vous pouvez mettre toutes les chaînes dans une liste et utiliser

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

Au moins, vous pouvez le mettre sur plusieurs lignes

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

J'ai utilisé '||' au lieu de '&&' pour surmonter entre les valeurs nulles – stom

+0

@stom Qu'est-ce que vous voulez dire par "entre une valeur nulle"? Si vous utilisez '||' au lieu de '&&', vous obtiendrez juste au moins une valeur nulle au lieu de toutes les valeurs sont nulles. – juharr

3

Faire un IEnumerable de chaînes (liste ou un tableau. ...), vous pouvez utiliser .All()

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

Ou en une seule ligne ... 'if (Enumerable.All (nouvelle chaîne [] {str1, str2, str3, str4}, s => s == null))' –

+0

@JimMischel: Cela crée une collection supplémentaire raccourcir une évaluation. Btw, il ne le raccourcit même pas vraiment. –

+0

@TimSchmelter: Oui, cela crée une collection supplémentaire, de même que la réponse que vous avez mise à jour. –

1

Cela devrait faire la même chose:

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

Cela retournera True si elles sont vides et pas seulement null. – Igoy

+0

Utilisez juste 'string.IsNullOrWhiteSpace' pour résoudre le problème mentionné ci-dessus et son gâteau. J'adore cette approche. – kuskmen

1

Eh bien, je ne sais pas si ce est plus agréable ou mieux, ou non, vous pouvez utiliser IEnumerable.Any méthode comme ce;

Détermine si une séquence contient des éléments.

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

} 

Et vous pouvez utiliser Enumerable.All() méthode comme;

Détermine si tous les éléments d'une séquence satisfont une condition.

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

Si vous voulez vérifier null ou vide, voici une autre façon sans tableaux:

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

Ne vérifie pas si tous sont null, la même chose que pour la réponse de Dennisch. –

+0

@Tim c'est vrai, édité post pour refléter cela. –

10

Si vous avez fait une fonction comme ceci:

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

Alors vous pouvez l'appeler comme ceci:

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

En fait, vous pouvez changer AllNull() pour travailler avec tout type de référence, comme ceci:

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