似たような質問がありますが、私のようなものはありません。void引数なしのFunc
戻り値のない関数(つまりvoid)とパラメータを持たない関数に相当するFuncはありますか?
関連する質問はFunc not returning anything? ですが、これは無効な型には対応していません。
(私のビューモデルからのアクションを私の見解に要求するのに必要です)。
似たような質問がありますが、私のようなものはありません。void引数なしのFunc
戻り値のない関数(つまりvoid)とパラメータを持たない関数に相当するFuncはありますか?
関連する質問はFunc not returning anything? ですが、これは無効な型には対応していません。
(私のビューモデルからのアクションを私の見解に要求するのに必要です)。
あなたの言葉は混乱しています。おそらく、「の戻り値のタイプのない関数であり、パラメータがありません」という意味です。単純にSystem.Actionがあります。あなたのコメントから
Action action =() => Console.WriteLine("hello world");
action();
:
しかし、私はアクションと、ボイドに
<T>
タイプに記入する必要が可能性ではありません(私は私の質問を編集します、私はミスを犯しました)。
これは誤解を示しています。アクションデリゲートのTはの入力です。空白はの出力です。アクションデリゲートは、本来、voidを返すデリゲートです。 Tは、の入力の型であり、引き続き引数を指定することができます。
いずれにしても、この回答と他のものが示すように、入力を必要としない代理人Tなしでアクション代理人を持つことができます。
はい、私は完全に
@anthony .NET Framework 3.5より前のバージョンではどうすればよいですか?デリゲートアクションはありません。アクション
@ ph1983、C#3以前では、C#2.0は*匿名メソッド*のサポートを追加しましたが、代理人を使用しました。わかりやすい質問はありませんが、[MSDN](http://msdn.microsoft.com/en-us/library/0yw3tz5k.aspx)でその機能について読むことができます。 –
あなたが探しているのはアクションです。パラメータはなく、値も返されません。
はい、Action
の異なるオーバーロードは、入力パラメータの数が異なり、返されるタイプがvoid
です。
Action public delegate void Action()
Action<T> public delegate void Action<T>(T obj)
Action<T1,T2> public delegate void Action<T1,T2>(T1 arg1, T2 arg2)
Action<T1,T2,T3> public delegate void Action<T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3)
...
最初の行があなたが探しているものです。
新しいフレームワークのバージョンでは、より多くの引数を持つオーバーロードが追加されています。引数の 最大数:
アクションは常に持っています戻り値の型はvoid
です。 void
戻り型はジェネリック型パラメータとして指定する必要はなく、指定できません。
Func<TResult> public delegate TResult Func<TResult>()
Func<T,TResult> public delegate TResult Func<T,TResult>(T arg)
Func<T1,T2,TResult> public delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2)
...
の.NET Framework 4.0ジェネリック型にin
とout
修飾子を追加しました:これとは対照的に、Func
代表は型を返すと、常に戻り値の型のための少なくとも一つのジェネリック型パラメータを持っているが、「本物」を定義します反共分散および共分散のパラメータ。参照:Covariance and Contravariance in Generics。例:
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)
@Anthony Pegram:しかし、私はアクションと、ボイドにタイプに記入する必要がある可能性はない(私は私の質問を編集します、私はミスを犯しました)。 –