web-dev-qa-db-ja.com

C#Lambda関数:データを返す

私は何かが足りないのですか、またはラムダ関数などの値を返すことができないのですか?.

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

または

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

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

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

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

前もって感謝します!

14
Drew R

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

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

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

ラムダ式をタイプ 'string'に変換できません

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

ラムダをインラインで呼び出したい場合–ただし、実際にはwhy? –それも可能です。まず明示的にデリゲートにする必要があります。

string test = (new Func<string>(() => { return "hello"; }))();
33
Konrad Rudolph