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

时间:2011-10-25 18:02:51

标签: c# .net predicate

不确定我的标题是否正确,请随时纠正我。

我的代码类似于以下内容:

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”应该是什么。怎么办呢?

2 个答案:

答案 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;
}