2011-10-25 30 views
1

不知道如果我有这个标题的权利,请随时纠正我。我如何将这个谓词定义为一个函数?

我有类似下面的代码:

string myValue = "aaa"; 
List<ListItem> myList = CreateMyList(); 
myList.Find(t=>t.Value == myValue); 

我想创建一个谓词函数,做同样的事情。我能够实现,如果我不需要myValue经过:

... 
    List<ListItem> myList = CreateMyList(); 
    myList.Find(SelectByValue); 
    ... 
} 

static bool SelectByValue(ListItem li) 
{      //***myValue is now hardcoded*** 
    return li.Value == "aaa"; 
} 

但我想可以指定应该是什么样的“AAA”当我拨打电话谓词功能。如何才能做到这一点?

回答

5

而不是返回一个布尔值,使其返回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>特定的方法更通俗易懂。

3
static Predicate<ListItem> SelectByValue(string value) 
{ 
    return item=>li.Value == value; 
} 
相关问题