在查看 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谓词应该是什么样的?
不清楚你为什么要循环和调用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. 然而,更有效的替代方案更复杂 - 我认为了解这段代码的工作原理对您来说很重要。
| 归档时间: |
|
| 查看次数: |
2127 次 |
| 最近记录: |