のようなラムダがある場合() => { throw new Exception(); }
、それがリターンタイプであるかどうかは不明です。Action
このため、(暗黙的に)とFunc<object>
(またはその他)の両方に変換できますFunc<T>
。これは、§6.5C #4仕様の無名関数変換によると次の理由によるものです。
[A]デリゲート型は、提供さ
D
れる無名関数と互換性があります。F
…</p>
がreturn型で、の本体が
D
ステートメントブロックの場合、[…]の本体が有効なステートメントブロックであり、returnステートメントが式を指定していません。void
F
F
が
D
非voidの戻り型を持ち、の本体がF
ステートメントブロックである場合、[…]の本体がF
到達不能なエンドポイントを持つ有効なステートメントブロックであり、各return
ステートメントが暗黙的に戻り値に変換可能な式を指定します。のタイプD
。
しかし、メソッドのオーバーロードが2つあり、一方がタイプのパラメーターを持ちAction
、もう一方Func<object>
が上からラムダを渡す場合、Func<object>
オーバーロードが使用されます。なんで?仕様のどの部分がこの場合Func<object>
よりも優れていると言っていますか?Action
私は§7.5.3.2より良い関数メンバーを見てきましたが、それはそれを説明していません。