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