15

何か不足していますか、または..のようなラムダ関数から値を返すことはできません..

Object test = () => { return new Object(); };

また

string test = () => { return "hello"; };

「デリゲート型ではないため、ラムダ式を型 '文字列' に変換できません」というビルド エラーが発生します。

この構文は、ラムダの結果ではなく、ラムダを代入しているように見えますが、これは予想外でした。関数を Func に割り当てて名前で呼び出すことで目的の機能を実現できますが、それが唯一の方法ですか?

「なぜこれを行う必要があるのですか?」私の例について。

前もって感謝します!

4

1 に答える 1

35

可能ですが、ラムダをに割り当てようとしていますstring。–ラムダを呼び出す必要があります:

Func<string> f = () => { return "hello"; };
string test = f();

エラーメッセージは実際にそれをすべて言います:

ラムダ式を「文字列」型に変換できません

…それがまさにここの問題です。

ラムダをインラインで呼び出したい場合 - しかし、実際には:なぜですか? – あなたもそれを行うことができます。最初にそれを明示的にデリゲートにする必要があります:

string test = (new Func<string>(() => { return "hello"; }))();
于 2013-03-20T13:49:14.713 に答える