2

次のようなタイプがある場合:

Type type = myObject.GetType ();

そのタイプのオブジェクトをパラメーターとして使用するジェネリックデリゲートを作成するにはどうすればよいですか?私は次のようなコードを期待します:

myDelegate = Action<type> (type parameter);

上記のコードは明らかに機能せず、そのままでは機能しませんが、どうすれば機能させることができますか?私もそれを機能させることができますか?

最終的に、Dictionary <Type、List <Action <>>のディクショナリがあります。このディクショナリには、型と、その型のオブジェクトをパラメータとして受け取る必要があるデリゲートのリストが含まれています。

そして、次のように実行する必要があります。

myDict[myType][i] (objectOfMyType);

任意の提案をいただければ幸いです。

ありがとう!

4

1 に答える 1

2

Action<>ご想像のとおり、このタイプのインスタンス化をディクショナリで直接使用することはできません。に入力してSystem.Delegate、次を使用する必要がありますDynamicInvoke

Dictionary<Type, List<Delegate>> dict;

dict[myType][i].DynamicInvoke(objectOfMyType);

そもそもデリゲートを作成するには、リフレクションを使用します。

Type delegateType = typeof(Action<>).MakeGenericType(myType);

MethodInfo delegatedMethod = typeof(ContainingType).GetMethod("MethodToInvoke");

Delegate myDelegate = Delegate.CreateDelegate(delegateType, delegatedMethod);
dict.Add(myType, new List<Delegate> {myDelegate});
于 2012-12-18T13:03:32.437 に答える