2011-10-25 15 views
1

私はこのタイトルの権利があるかどうか分かりませんが、私を修正してください。この述語を関数としてどのように定義すればよいですか?

私は次のようなコードがあります。

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

を私は同じことを行い述語関数を作成したいと思います。

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

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

しかし、私は、述語関数の呼び出しを行う際に「AAA」はどうあるべきかを指定できるようにしたいと思います:私はmyValueに渡す必要がない場合は、それを実装することができています。これはどうすればできますか?

答えて

5

よりもむしろブール値を返す、それはPredicate<ListItem>を返します

static Predicate<ListItem> SelectByValue(String target) 
{ 
    return delegate(ListItem li) { return li.Value == target; }; 
} 

その後コール方法:

myList.Find(SelectByValue("foo")); 

注C#3は、これは少しシンプルな作りラムダ式を導入していること:

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; 
} 
関連する問題