ようなものになるだろう。..
を啓発してください。コンパイラはどのようなタイプのエントリを特定のエントリに興味があるのかをどのように知っていますか?
Dictionary<Type, Action<T>>
の関係を説明することもできません。各辞書エントリには、タイプであるキーとそのタイプを使用するアクションがあります。ジェネリックスはその関係をサポートしていません。
の場合は、使用しようとする種類を知っている場合は、Dictionary<string, Delegate>
にして、値をキャストしてキャストしてください。または、Action<object>
を使用してボクシングと一緒に暮らし、キャストすることができます。ただDelegate
と匿名メソッドやラムダ式を使用するように、あなたはキャストする必要があります
注 - または便利な変換方法を記述します。
public static Delegate ConvertAction<T>(Action<T> action)
{
return action;
}
あなたが書くことができますこの方法:
Delegate dlg = ConvertAction((long x) => Console.WriteLine("Got {0}", x));
または辞書の文脈で:
var dict = new Dictionary<string, Delegate>();
dict["Key1"] = ConvertAction((long x) => Console.WriteLine("Got {0}", x));
あなたは再びかかわらず、辞書のうちの値をフェッチするときedは
代わりに直接辞書をさらすこと、あなたが辞書をカプセル化することができ...
異なるタック...右の型にキャストしますあなた自身のタイプ、およびジェネリックAdd
方法があります。
public void Add<T>(string key, Action<T> action)
だから、まだ舞台裏Dictionary<string, Delegate>
だろうが、あなたのタイプは、それが唯一の単一の引数を取る代表団だった値が含まれていることを確認しますが。
(改訂)ボクシングはあなたが考えるほど悪くはありません。特に、ボクシングはダイナミックな呼び出しよりもはるかに*高速です。 –