在.Net 2.0中:如何在List <t>中形成查找()某些谓词委托?</t>

时间:2011-09-21 13:55:55

标签: 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);
}

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

1 个答案:

答案 0 :(得分:3)

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

Name found = lstName.Find(delegate(Name name) {
                              return name.FirstName + name.LastName == x;
                          });

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

Name found = lstName.Find(name => name.FirstName + name.LastName == x);

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

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

请注意,这不会非常有效,因为它会在每个 input上查看整个Name。但是,更有效的替代方案更复杂 - 我认为了解这段代码的工作方式非常重要。