2009-06-12 20 views
7

Es mi entendimiento de que si quiero obtener el ID de un elemento de una lista, yo puedo hacer esto:¿Cómo puedo encontrar el índice de una cadena indefinida en una lista <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"); 
} 

Pero lo que si Quiero hacer la comparación dinámica? Entonces, en lugar de verificar si item == "box", quiero pasar una cadena ingresada por el usuario al delegado y verificar si item == searchString.

Respuesta

18

Usar un cierre generado por el compilador mediante un método anónimo o lambda es una buena forma de usar un valor personalizado en una expresión de predicado.

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

Si está utilizando .NET 2.0 (sin lambda), esto va a funcionar así:

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

Hermosa amigo, gracias! Espero con ansia mi actualización 3.0 para que pueda usar esos lambdas. – ChristianLinnell

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

Sólo puede hacer

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; 
      } 
     } 
Cuestiones relacionadas