4

型引数が一致するデリゲートにメソッドを割り当てることができます。

Func<string, DateTime> f = DateTime.Parse;

共変型引数を使用して、ラムダをデリゲートに割り当てることができます。

Func<string, object> f = s => DateTime.Parse(s);

ただし、共変型引数を持つデリゲートにメソッドを割り当てることはできません。

Func<string, object> f = DateTime.Parse; //ERROR: has the wrong return type

なぜだめですか?

4

1 に答える 1

7

差異は値型では機能しません。異なる JIT を行う必要があるためです。

ラムダ式のバリアントには分散が含まれていません。DateTime代わりに、 からへの暗黙的なボックス化変換を使用して、ラムダ式にコンパイルしobjectます。

参照型を返すメソッドを使用すると、正常に機能します。

Func<string, object> f = string.Intern;
于 2013-10-16T18:37:34.000 に答える