C# 如何在列表中查找未定义字符串的索引<;T>;

C# 如何在列表中查找未定义字符串的索引<;T>;,c#,list,delegates,predicate,C#,List,Delegates,Predicate,我的理解是,如果我想获取列表中某个项目的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(predic

我的理解是,如果我想获取列表中某个项目的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");
}
private static void a()
{
列表=新列表{“框”、“门”、“车”};
谓词谓词=新谓词(getBoxId);
int-boxId=list.FindIndex(谓词);
}
私有静态bool getBoxId(字符串项)
{
返回(项目=“框”);
}

但是如果我想让比较变得动态呢?因此,我不想检查item==“box”,而是想向委托传递一个用户输入的字符串,并检查item==searchString。

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

private static void findMyString(string str)
{
    List<string> list = new List<string> {"Box", "Gate", "Car"};
    int boxId = list.FindIndex(s => s == str);
}
私有静态void findMyString(字符串str)
{
列表=新列表{“框”、“门”、“车”};
intboxid=list.FindIndex(s=>s==str);
}
如果您使用的是.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; });
}
私有静态void findMyString(字符串str)
{
列表=新列表{“框”、“门”、“车”};
int-boxId=list.FindIndex(委托(字符串s){return s==str;});
}
你可以这样做

string item = "Car";
...

int itemId = list.FindIndex(a=>a == item);
列表列表=新列表(“盒子”、“门”、“车”);
字符串SearchStr=“Box”;
int-BoxId=0;
foreach(字符串搜索列表中的字符串)
{
if(str==SearchString)
{
BoxId=list.IndexOf(str);
打破
}
}

美丽的伴侣,谢谢!期待着我的3.0升级,这样我就可以使用那些lambdas了。
string item = "Car";
...

int itemId = list.FindIndex(a=>a == item);
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;
            }
        }