18

C# コンパイラが型を推論できる理由が理解できません。

Array.ConvertAll(new int[1], i => Convert.ToDouble(i));

しかし、そうではありません

Array.ConvertAll(new int[1], Convert.ToDouble);

前者の方が後者よりも複雑な推論になるように思われる場合。

誰かがなぜこれが起こるのか説明してもらえますか?

4

1 に答える 1

11

この問題は、この (アーカイブされた) ブログ投稿でかなり詳しく説明されています。メンバーグループで動作しない.aspx

私が理解しているように要約すると(リンクが消えた場合); これは、C# 3.0 での意識的な設計上の決定であり、メソッド グループ (2 番目の例) で型推論を実行することは適切ではありませんでした。

かなりの数の人々がそれを好まなかったと思うので、この問題は C# 4.0 (Visual Studio 2010 以降) で解決されました。

「C# 4.0 では、戻り値の型の推論は、メソッド グループが、デリゲートから推定される完全に固定された引数の型のセットに明確に関連付けられる場合に、メソッド グループの引数に対して機能します。メソッド グループに関連付けられた引数の型が既知になると、オーバーロードの解決が可能になります。メソッド グループ内のどのメソッドがデリゲートの仮パラメーターに関連付けられているかを明確に判断し、特定のメソッドからデリゲートの戻り値の型への戻り値の型を推論できます。」

于 2012-06-01T03:33:51.713 に答える