在 .Net 2.0 中:如何在 List<T> 中为 Find() 形成谓词委托?

Raj*_*r G 2 c#-2.0

在查看 MSDN 之后,我仍然不清楚我应该如何使用 T 的成员变量(其中 T 是一个类)形成一个正确的谓词来使用 List 中的 Find() 方法例如:

public class Name
{
    public string FirstName;
    public string LastName;
    public String Address;
    public string Designation;
}

String[] input = new string[] { "VinishGeorge", "PonKumar", "MuthuKumar" };
//ConCatenation of FirstName and Lastname

List<Name> lstName = new List<Name>();

Name objName = new Name();
// Find the first of each Name whose FirstName and LastName will be equal to input(String array declard above).

for(int i =0;i<lstName.Count;i++)
{
    objName = lstName .Find(byComparison(x));
    Console.Writeline(objName .Address + objName.Designation);
}
Run Code Online (Sandbox Code Playgroud)

我的byComparison谓词应该是什么样的?

Jon*_*eet 5

不清楚你为什么要循环调用Find. 通常你Find 不会在循环中调用- 它会为你循环。匿名方法在这里是你的朋友:

Name found = lstName.Find(delegate(Name name) {
                              return name.FirstName + name.LastName == x;
                          });
Run Code Online (Sandbox Code Playgroud)

如果您使用 C# 3(甚至针对 .NET 2),您可以使用 lambda 表达式:

Name found = lstName.Find(name => name.FirstName + name.LastName == x);
Run Code Online (Sandbox Code Playgroud)

编辑:要查找input您可以使用的所有名称:

List<Name> matches = lstName.FindAll(delegate(Name name) {
                               string combined = name.FirstName + name.LastName;
                               return input.Contains(combined);
                           });
Run Code Online (Sandbox Code Playgroud)

请注意,这不会非常有效,因为它会input每个 Name. 然而,更有效的替代方案更复杂 - 我认为了解这段代码的工作原理对您来说很重要。