C# 如何对泛型列表类使用Find方法按名称查找特定实例

C# 如何对泛型列表类使用Find方法按名称查找特定实例,c#,generics,list,listbox,find,C#,Generics,List,Listbox,Find,我有一个system.collections.generic.list(列表框的列表) 我想使用集合类内置的Find方法通过ListBox的名称查找特定的ListBox 我发现了以下MSDN文章 这不适用于我,因为它没有显示如何通过集合名称在集合中查找特定实例 该示例将“saurus”的搜索字符串硬编码到Find谓词中。我想输入搜索名称。当我在我创建的FindListBox函数中添加一个变量时,我得到一个错误,说签名不匹配 我知道我可以在我自己的类中添加一个私有方法,但现在我很好奇如何在泛型中

我有一个system.collections.generic.list(列表框的列表)

我想使用集合类内置的Find方法通过ListBox的名称查找特定的ListBox

我发现了以下MSDN文章

这不适用于我,因为它没有显示如何通过集合名称在集合中查找特定实例

该示例将“saurus”的搜索字符串硬编码到Find谓词中。我想输入搜索名称。当我在我创建的FindListBox函数中添加一个变量时,我得到一个错误,说签名不匹配

我知道我可以在我自己的类中添加一个私有方法,但现在我很好奇如何在泛型中实现Find,这样我就可以做到这一点

Seth

假设您使用的是C#3:

对于C#2:


(是的,这仍然是对值进行硬编码,只是出于示例目的。但是
nameToFind
变量可以是方法参数,或者方法调用的结果等)。

MSDN上的示例可以扩展如下:

private static ListBox EndsWith(String s, List<ListBox> list)
{
  return list.Find(
    delegate(ListBox l)
    {
      return l.Name.EndsWith(s);
    }
  );
}

谢谢你的回答,乔恩。给其他人打分。。。他比你更需要他们但你的回答也起了作用。与他的相同。无需使用
FirstOrDefault
-您仍然可以使用
List.Find
和lambda表达式。Find处理空值的效果好吗?我使用FirstOrDefault的部分原因是,我希望在某些情况下没有匹配项。
string nameToFind = "saurus";
ListBox found = list.Find(delegate (ListBox x) { return x.Name == nameToFind; });
private static ListBox EndsWith(String s, List<ListBox> list)
{
  return list.Find(
    delegate(ListBox l)
    {
      return l.Name.EndsWith(s);
    }
  );
}
list.FirstOrDefault(x => x.Name.EndsWith("something");