我如何将此谓词定义为函数?

Abe*_*ler 1 .net c# predicate

不确定我是否拥有这个标题,请随时纠正我.

我有类似以下代码:

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"应该是什么.如何才能做到这一点?

Jon*_*eet 5

而不是返回一个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>特定方法更惯用.