在查看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
谓词应该是什么样的?
答案 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
。但是,更有效的替代方案更复杂 - 我认为了解这段代码的工作方式非常重要。