、組み込みのデリゲートメソッドを持つ.NETでのFuncデリゲートについて教えてくださいなぜ、次のラムダ式は、それに合わせない、のFuncデリゲートについて明確に理解していない:は、.NET 4.0では4.0
// p is a XElement object
p=>p.Element("firstname").Value.StartsWith("Q")
、組み込みのデリゲートメソッドを持つ.NETでのFuncデリゲートについて教えてくださいなぜ、次のラムダ式は、それに合わせない、のFuncデリゲートについて明確に理解していない:は、.NET 4.0では4.0
// p is a XElement object
p=>p.Element("firstname").Value.StartsWith("Q")
Func<T,TResult>
は、T
をパラメータとして受け入れ、TResult
を返すメソッドを意味します。あなたのラムダは、T=XElement
とTResult=bool
の場合、ラムダはT
を返し、TResult
を返します。その場合には、それは一般に述語と呼ばれることになる。特に。コンパイラは、(すべてではない)多くのシナリオでの使用に基づいて、汎用型引数(T
およびTResult
)を推論できます。
in
とout
は(コ|コントラ)を参照してください方法の-variance行動 - ないout
の通常の使用(ここではで-refを意味するものではありませんすなわちout
、であることを想定していませんコール時に割り当てられ、終了する前に割り当てる必要があります)。
Func<T,TResult>
TA 2つの一般的なパラメータ:T
とTResult
があります。あなたが見ることができるように、T
はarg
パラメータのタイプであるとTResult
したがって、あなたのコード
// p is a XElement object
p=>p.Element("firstname").Value.StartsWith("Q")
だろ有効Func<XElement, bool>
、戻り値の型です。
そして、魔法のトリックは、.NETが[型推論](http://en.wikipedia.org/wiki/Type_inference)を使って 'T'と' TResult'の型を理解することです。したがって、 'p'の型から自動的に' T'を、 'StartsWith(" Q ")'結果の値(boolean)から 'TResult'を自動的に推論します。 –
それはまさに! Marcが指摘したように、 'boolean'を返す代理人は一般に述語と呼ばれます – Connell
この文脈では 'method'という単語が機能するように変更すると、私はあなたの答えに同意し、それをupvoteします。 –
@Lajosいいえ、それは**間違っているでしょう**。特にC#には*機能がありません。 'Func'のようなデリゲートは**メソッド**にバインドされます。 –
さて、どのクラスにも属さない関数を追加できるモジュールを作ることができるので、C#にはメソッドだけでなく関数もあります。私は、モジュール内の関数が述語であることはほとんど確信していますが、テストしませんでした。私はこのコメントの後半部分で間違っているかもしれません。 –