如何在List <T>中找到未定义字符串的索引

Chr*_*ell 7 c# delegates predicate list

我的理解是,如果我想获取列表中项目的ID,我可以这样做:

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");
}
Run Code Online (Sandbox Code Playgroud)

但是如果我想让比较动态呢?因此,我不想检查item =="box",而是将用户输入的字符串传递给委托,并检查item == searchString.

Jon*_*upp 18

通过匿名方法或lambda使用编译器生成的闭包是在谓词表达式中使用自定义值的好方法.

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

如果你使用的是.NET 2.0(没有lambda),那么它也会起作用:

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; });
}
Run Code Online (Sandbox Code Playgroud)