2009-06-12 31 views
7

Ben Listedeki bir öğenin kimliğini almak istiyorsanız, bunu yapabilirim benim anladığıma içinde tanımlanmamış bir dize dizini bulmak nasıl: eğerBir List <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"); 
} 

Ama ne Karşılaştırma dinamiğini yapmak istiyorum? Bu yüzden, eğer item == "kutucuğunu" kontrol etmek yerine, kullanıcı tarafından girilen bir dize delegeye geçmek ve item == searchString olup olmadığını kontrol etmek istiyorum.

cevap

18

Derleyici tarafından oluşturulan bir kapak, anonim bir yöntemle veya lambda kullanılarak, bir yüklem ifadesinde özel bir değer kullanmanın iyi bir yoludur.

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

.NET 2.0 (hayır lambda) kullanıyorsanız, bu aynı zamanda çalışacak:

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

Güzel yapabilirsiniz dostum, teşekkürler! Benim 3.0 yükseltme için bekliyorum bu yüzden bu lambda kullanabilirsiniz. – ChristianLinnell

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

sadece

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; 
      } 
     } 
İlgili konular