第1式と第3式はなぜ動作しますが、2式は動作しません。ラムダ式の戻り値型の問題
var ss = new Func<int>(() => 0);
で
var ss = new Func<int>(() => 0); //works
int x1 = new Func<int>(() => 0); //doesn't work --Cannot convert source type 'System.Func<int>' to target type 'int'
int x2 = new Func<string,int>((x) => 0)(""); //works
基本的に、 'Func'を 'int'型の変数に入れようとしています。何か間違っている;) –
Sehnsucht
'int x1 = new Func(()=> 0)();'は、関数式を呼び出して0の結果を得た後、それをintに代入することで動作します。しかし、実際には返り値とはあまり関係ありません。また、varに何かを割り当てることができるので、最初の動作が注目されます。 3番目の関数は、関数式(特に期待どおりの文字列)を呼び出すためです。 –
@TravisJ 'var'には何も置くことはできません。式から型を(静的に)決めることができる "唯一の"ものです。たとえば、 'var foo = delegate(){return 0; }; 'うまくいきません。 – Sehnsucht