2017-03-29 5 views
0

Ich habe List<String> clr9, die eine bekannte Count von neun hat.Vergleichen Sie alle Strings in einer Liste - C#

Was ich wissen möchte ist, wie man etwas kurz schraffiert, das später im Code weitergeht.

else if(clr9[0].Equals(clr9[1]) && clr9[0].Equals(clr9[2]) && clr9[0].Equals(clr9[3])) 

Ich habe dies bereits versucht:

else if(clr9[0].Equals(clr9[1].Equals(clr9[2].Equals(clr9[3])))) 

, aber es scheint nicht zu funktionieren. Gibt es eine Möglichkeit, die Ampersands zu vermeiden? Im Grunde nur fragen, ob es einen Weg gibt, um herauszufinden, ob alle 4 Strings identisch sind, ohne die if-Anweisung zu überladen.

+0

Ich muss vielleicht hinzufügen, dass die Zahlen neben den Klammern ihre Kapazität angeben Stadt. So würde clr9 9 Gegenstände haben. Ich überprüfe nur, ob die ersten 4 gleich sind. Nicht die ganze Liste. – Chamkey

+1

'crlX.Skip (1) .Take (3) .All (str => str == clrX [0])' –

+0

@Chamkey Sie müssen nicht die Kapazität überprüfen, Unterscheidung funktioniert für jede Länge der Liste –

Antwort

0

Nun, wenn Sie nur alle Zeichenfolgen innerhalb einer einzigen Liste wie zum Beispiel clr9 überprüfen. Was Sie tun können, ist die Verwendung von LINQ Distinct:

if (clr9.Distinct().Skip(1).Any()) 
{ 
    //Do something 
} 

T

Hoffe, es hilft!

1

Sie können die Liste unterscheiden, um Duplikate zu entfernen, und die Länge überprüfen.

z.B.

clr9.Distinct().Count() == 1

oder, wenn Sie es unempfindlich Fall sein wollen

clr9.Distinct(StringComparer.CurrentCultureIgnoreCase).Count() == 1

1

Distinct funktionieren wird, aber ich denke, die Prüfung Gleichheit direkt ausdruck Vorsatz ist:

if(clr9.Skip(1).All(c => c.Equals(clr9[0]))) 
+0

Ich habe Upvoted, da ich denke, dass dies die beste Lösung ist, aber ich würde 'c == clr9 [0]' stattdessen verwenden. –

+0

Für String verwende ich 'Equals (String)'. Es ist ausführlicher, in diesem Fall vielleicht überladener als der Gleichheitsoperator. Aber für 'String' bevorzuge ich die syntaktische Affinität zu' Equals (String, StringComparison) 'zum schöneren' == '. –

0

Ich bin oft genug auf diese Situation gestoßen, dass ich eine einfache Erweiterungsmethode dafür geschrieben habe.

public static bool In<T>(this T val, params T[] options) 
{ 
    return options.Contains(val); 
} 

Und dann

in Ihrem Code-Anweisung verwenden
else if (clr9[0].In(clr9.Skip(1).ToArray())) 

bearbeiten basierend auf Kommentar von OP, das funktioniert genauso gut:

else if (clr9[0].In(clr9[1], clr9[2], clr9[3])) 

Oder

else if (clr9[0].In(clr9.Skip(1).Take(3).ToArray()) 
+0

'Objekt'?!?!?! Warum nicht die Methode generisch machen? –

+0

Guter Punkt. Ich werde die Antwort aktualisieren. –