2009-06-12 28 views
7

Đó là sự hiểu biết của tôi rằng nếu tôi muốn có được ID của một mục trong một danh sách, tôi có thể làm điều này:Làm thế nào để tìm ra chỉ số của một chuỗi xác định trong một danh sách <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"); 
} 

Nhưng nếu Tôi muốn làm cho sự so sánh năng động? Vì vậy, thay vì kiểm tra nếu item == "box", tôi muốn chuyển một chuỗi người dùng nhập vào đại biểu, và kiểm tra xem item == searchString.

Trả lời

18

Sử dụng trình đóng được tạo bởi trình biên dịch thông qua một phương thức ẩn danh hoặc lambda là một cách hay để sử dụng giá trị tùy chỉnh trong biểu thức vị từ.

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

Nếu bạn đang sử dụng .NET 2.0 (không lambda), điều này sẽ làm việc tốt:

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

đẹp bạn đời, cảm ơn! Rất mong nhận được bản nâng cấp 3.0 của tôi để tôi có thể sử dụng các lambdas đó. – ChristianLinnell

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

Bạn chỉ có thể làm

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; 
      } 
     } 
Các vấn đề liên quan