2009-06-12 5 views
7

To moja zrozumienie, że jeśli chcę, aby uzyskać identyfikator elementu na liście, można zrobić to:Jak znaleźć indeks nieokreślonej ciąg w formie listy <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"); 
} 

Ale co jeśli Chcę, aby porównanie było dynamiczne? Dlatego zamiast sprawdzać, czy element == "box", chcę przekazać do łańcucha znak wprowadzony przez użytkownika i sprawdzić, czy element == searchString.

Odpowiedz

18

Używanie kompilatora generowanego przez anonimową metodę lub lambda jest dobrym sposobem na użycie niestandardowej wartości w wyrażeniu predykatu.

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

Jeśli używasz .NET 2.0 (nie lambda), to będzie działać jak dobrze:

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

piękne kolego, dzięki! Nie mogę się doczekać mojej aktualizacji 3.0, więc mogę używać tych lambd. – ChristianLinnell

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

Można po prostu zrobić

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; 
      } 
     } 
Powiązane problemy