2009-06-12 18 views
7

Es ist mein Verständnis, dass, wenn ich die ID eines Elements in einer Liste erhalten möchten, kann ich dies tun:Wie kann ich in einer Liste den Index eines nicht definierten Zeichenfolge finden <T>

private static void a() 
{ 
    List<string> list = new List<string> {"Box", "Gate", "Car"}; 
    Predicate<string> predicate = new Predicate<string>(getBoxId); 
    int boxId = list.FindIndex(predicate); 
} 

private static bool getBoxId(string item) 
{ 
    return (item == "box"); 
} 

Aber was, wenn Ich möchte den Vergleich dynamisch machen? Anstatt also zu überprüfen, ob item == "box", möchte ich eine vom Benutzer eingegebene Zeichenfolge an den Delegaten übergeben und prüfen, ob item == searchString.

Antwort

18

Die Verwendung eines vom Compiler generierten Abschlusses über eine anonyme Methode oder Lambda ist eine gute Möglichkeit, einen benutzerdefinierten Wert in einem Prädikatausdruck zu verwenden.

private static void findMyString(string str) 
{ 
    List<string> list = new List<string> {"Box", "Gate", "Car"}; 
    int boxId = list.FindIndex(s => s == str); 
} 

Wenn Sie .NET 2.0 (kein Lambda) verwenden, wird dies auch funktionieren:

private static void findMyString(string str) 
{ 
    List<string> list = new List<string> {"Box", "Gate", "Car"}; 
    int boxId = list.FindIndex(delegate (string s) { return s == str; }); 
} 
+0

Schöne Kumpel, danke! Ich freue mich auf mein 3.0-Upgrade, damit ich diese Lambdas verwenden kann. – ChristianLinnell

1
string toLookFor = passedInString; 
int boxId = list.FindIndex(new Predicate((s) => (s == toLookFor))); 
2

können Sie tun nur

string item = "Car"; 
... 

int itemId = list.FindIndex(a=>a == item); 
0
List <string> list= new List<string>("Box", "Gate", "Car"); 
string SearchStr ="Box"; 

    int BoxId= 0; 
     foreach (string SearchString in list) 
     { 
      if (str == SearchString) 
      { 
       BoxId= list.IndexOf(str); 
       break; 
      } 
     } 
Verwandte Themen