2011-12-15 13 views
2

のための簡単な方法で、<のFunc >説明して​​いただけます。 は、誰かが私を含むコードで探しています私

public virtual ICollection<T> GetPk(string pk) 
{ 
    Expression<Func<T, bool>> predicate = c => c.PartitionKey == pk; 
    return this.GetAll(predicate); 
} 

を誰かが<Func<T, bool>>の構文を説明できますか?最良の説明の

+0

あなたはそれについて理解していませんか? – Oded

答えて

2

一つは、あなたが明示的にカスタムデリゲートを宣言せずにパラメータとして渡すことができる方法を表すために、このデリゲートを使用することができますMSDN

で見つけることができます。カプセル化されたメソッドは、このデリゲートによって定義されたメソッドのシグネチャに対応している必要があります。つまり、カプセル化されたメソッドは、値によって渡される1つのパラメータを持つ必要があり、値を返す必要があります。

あなたの例では、Tは入力パラメータの型であり、boolは厳密なメソッドの戻り型です。

1

私はいつもポストメッセージポップインを見ていない、最初にこのようなものに価値をチェックするMaheepに殴ら

http://msdn.microsoft.com/en-us/library/bb549151.aspx

をMSDNを見つけます。

基本的には、シグネチャと一致するメソッドを宣言しています。このメソッドは、呼び出しに渡されてデータを取得できます。

3

Func<T, bool>は、タイプがTのオブジェクトを受け取り、boolを返す関数を表します。これは一般に「述語」と呼ばれ、オブジェクトの状態を検証するために使用されます。

Expression<Func<T, bool>>は、機能、すなわちその構文構造のabstract syntax treeを表す。これは、データベースに対して実行されるようにSQLに変換するなど、さまざまな目的で関数のコードを分析するために使用できます。

1

それは最初に混乱であるがFunc<T, bool>がBOOLを返し、この場合、型T

などのパラメータを受け付ける機能を示し、TはPartitionKey性質を持つオブジェクトであり、このGetPk方法が使用されています文字列pkと一致するPartitionKeyを持つインスタンスオブジェクト内のすべてのTアイテムに一致するように、Func<T, bool>を追加します。

3

単にFunc<T, bool>は匿名メソッドシグニチャです。最初の型はTで、入力パラメータの型は2番目の型は戻り型です。これはあなたの表現を考慮すると、より多くの方法に似ています:

bool AnonMethod(T arg0) 
{ 
    return arg0.PartitionKey == pk; 
} 
1

いくつかの背景; Func<T, TResult>(およびこのファミリの残りの部分)がフレームワークの一部である前に、明示的にデリゲートを定義するか、匿名メソッドを使用する必要がありました。

FuncおよびActionが、ラムダ式の言語の追加の一部として追加されました。ラムダ式は型定義されたフレームワーク定義のデリゲートですが、開発者として独自のカスタムデリゲート定義の代わりに使用することもできます。

あなたはここで素晴らしい履歴を得ることができます。

http://blogs.msdn.com/b/ericwhite/archive/2006/10/03/lambda-expressions.aspx

関連する問題