私は知識が必要な状況に遭遇しました。アクションはFunc <TResult>と同じですか?
// A function to match the delegate
public static int DoSomething()
{
Console.WriteLine("i am called");
return 1;
}
// Usage
Action action =() => DoSomething();
Func<int> func =() => DoSomething();
action();
func();
Action
の私の理解では、それが何のパラメータを受け入れないし、何も返さないデリゲートを一致させる必要があることにするために使用:以下
はコードです。
Func<int>
の場合、パラメーターを受け入れずにint
を返すデリゲートと一致する必要があります。 () => DoSomething()
int
を返すデリゲートです:
DoSomething
方法は、それゆえ私の質問は、整数を返します。 Func
は期待通りに機能しますが、Action
は機能しません。どうして?私はここで何が分からないのですか?
コードは正しくコンパイルされて実行され、両方とも出力i am called
です。私が知りたいことは、なぜAction action =() => DoSomething();
はコンパイル時エラーではないのですか?
* >>でもアクションはありません* - どのように動作しないのですか? –
'Action
@singsuyash C#コンパイラは、 '(x)=> DoSomething(x)'は文脈に応じて異なることを理解するのに十分スマートです。それを使って 'Action'変数を割り当てると' Func'ではなく 'Action'が生成され、' DoSomething(x) 'の返り値は無視されます。 –