2011-10-25 38 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; 
} 
相關問題