2009-07-28 6 views
4

Ich möchte überprüfen, ob eine Zeichenfolge mit einer Liste von Werten übereinstimmt.In .Net, "knappe" Möglichkeit zu prüfen, ob eine Zeichenfolge mehrere Werte enthält?

Es gibt natürlich viele, ich viele Möglichkeiten, um über diese gehen könnte: if-Anweisung switch-Anweisung, RegEx usw. Allerdings würde ich gedacht, dass .Net etwas entlang der Linien von

if (myString.InList("this", "that", "the other thing")) 
hätte

Bisher ist die nächste Sache, die ich finden kann wäre so etwas wie:

"this; that; the other thing;".Contains(myString) 

Ist das so ziemlich der einzige Weg zu gehen, wenn ich den Scheck in einer einzigen Zeile tun will und will nicht RegEx benutzen?

Antwort

5

Sie könnten Erweiterungsmethoden in .NET 3.5 verwenden Syntax zu haben wie

if (myString.InList("this", "that", "the other thing")) {} 

Genau so etwas wie dieses Add (und importieren):

public static bool InList(this string text, params string[] listToSearch) { 
    foreach (var item in listToSearch) { 
     if (string.Compare(item, text, StringComparison.CurrentCulture) == 0) { 
      return true; 
     } 
    } 
    return false; 
} 

Wenn Sie ältere Version verwenden, Sie könnten diese Funktion trotzdem verwenden, aber Sie müssen sie wie folgt aufrufen:

In der InList-Funktion entfernen Sie natürlich dieses Schlüsselwort.

+0

Danke, das ist am nächsten zu dem, was ich gesucht habe. Leider kann ich 3.5 momentan nicht benutzen, aber das ist eine sehr nette Information. – Rob3C

10

Wenn Sie .NET 3.0 verwenden, gibt es eine Methode von Typ enumarable-Objekten, die es ermöglichen, dass dies in einem in-line erstellten Zeichenfolgenarray funktioniert. Geht das für dich?

if ((new string[] { "this", "that", "the other thing" }).Contains(myString)) 

Danke für den Tipp Kommentar. In der Tat funktioniert das auch:

if ((new [] { "this", "that", "the other thing" }).Contains(myString)) 

Ich bin ambivalent darüber gewesen, ob die Verwendung von abgeleiteten Typen eine gute Idee ist. Die Kürze ist nett, aber manchmal bin ich frustriert, wenn ich versuche, die Datentypen bestimmter Variablen herauszufinden, wenn der Typ nicht explizit angegeben wird. Für so etwas Einfaches sollte der Typ jedoch offensichtlich sein.

+2

Sie können sogar überspringen die „string“ ein Teil davon verwendet, da es geschlossen werden kann. –

+0

Der Compiler/Intellisense ermittelt es und die Tooltips oder andere Informationen (der Array-Typ sollte z. B. in der Info für Contains() angezeigt werden) werden angezeigt. (Wenn der Compiler den Typ auch nicht herausfinden kann, wird er nicht kompiliert. Abgeleitete Typen in C# werden beim Kompilieren aufgelöst, nicht bei der Laufzeit.) – Zooba

+0

Obwohl sie zur Kompilierungszeit aufgelöst werden, gibt es keine Möglichkeit, den Typ einfach zu kopieren Name, um eine andere Variable desselben Typs zu erstellen. – BlueMonkMN

1

Sie könnten Uns kombinieren und BlueMonks beantworten und verwenden (.NET 3 vorausgesetzt):

if ("this;that;the other thing;".Split(";").Contains(myString) ... 
0

hey ich war für die gleiche Sache suchen, aber in umgekehrter Art und Weise, wie mein String-Wert im Vergleich in der Liste der Werte sollten

List<string> methodList = new List<string>(); 
methodlist.add("this"); 

methodlist.add("That"); 
methodlist.add("Everything"); 
string line = "this is line number 1"; 
string line2 = "that is line number 2"; 
string line3 = "about the everything else"; 
line.contains(methodlist); 
line2.contains(methodlist); 

hoffe du hast die anforderung frühe hilfe kann sehr nützlich sein. Bis jetzt habe ich, wie unten aber sucht für erweiterte Hilfe

private static bool LineIsInTheList(List<string> list,string line) 
    { 
     foreach (string methodName in list) 
     { 
      if (line.Contains(methodName)) 
       return true; 
     } 
     return false; 
    } 
Verwandte Themen