不确定我是否拥有这个标题,请随时纠正我.
我有类似以下代码:
string myValue = "aaa";
List<ListItem> myList = CreateMyList();
myList.Find(t=>t.Value == myValue );
Run Code Online (Sandbox Code Playgroud)
我想创建一个Predicate函数来做同样的事情.如果我不需要传入,我可以实现它myValue:
...
List<ListItem> myList = CreateMyList();
myList.Find(SelectByValue);
...
}
static bool SelectByValue(ListItem li)
{ //***myValue is now hardcoded***
return li.Value == "aaa";
}
Run Code Online (Sandbox Code Playgroud)
但是我希望能够在调用谓词函数时指定"aaa"应该是什么.如何才能做到这一点?
而不是返回一个bool,让它返回一个Predicate<ListItem>:
static Predicate<ListItem> SelectByValue(String target)
{
return delegate(ListItem li) { return li.Value == target; };
}
Run Code Online (Sandbox Code Playgroud)
然后调用方法:
myList.Find(SelectByValue("foo"));
Run Code Online (Sandbox Code Playgroud)
请注意,C#3引入了lambda表达式,使其更简单:
static Predicate<ListItem> SelectByValue(String target)
{
return li => li.Value == target;
}
Run Code Online (Sandbox Code Playgroud)
...在.NET 3.5及更高版本中,使用LINQ通常比使用List<T>特定方法更惯用.
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |