不确定我的标题是否正确,请随时纠正我。
我的代码类似于以下内容:
string myValue = "aaa";
List<ListItem> myList = CreateMyList();
myList.Find(t=>t.Value == myValue );
我想创建一个执行相同操作的Predicate函数。如果我不需要传递myValue
:
...
List<ListItem> myList = CreateMyList();
myList.Find(SelectByValue);
...
}
static bool SelectByValue(ListItem li)
{ //***myValue is now hardcoded***
return li.Value == "aaa";
}
但是我希望能够在调用谓词函数时指定“aaa”应该是什么。怎么办呢?
答案 0 :(得分:5)
不是返回bool,而是返回Predicate<ListItem>
:
static Predicate<ListItem> SelectByValue(String target)
{
return delegate(ListItem li) { return li.Value == target; };
}
然后调用方法:
myList.Find(SelectByValue("foo"));
请注意,C#3引入了lambda表达式,使其更加简单:
static Predicate<ListItem> SelectByValue(String target)
{
return li => li.Value == target;
}
...在.NET 3.5及更高版本中,使用LINQ通常比List<T>
特定方法更惯用。
答案 1 :(得分:3)
static Predicate<ListItem> SelectByValue(string value)
{
return item=>li.Value == value;
}