如何使用C#中的类型创建泛型委托?

时间:2012-12-18 12:57:27

标签: c# types delegates unity3d

如果我有类型,例如:

Type type = myObject.GetType ();

如何创建使用该类型对象作为参数的泛型委托?我希望代码类似于:

myDelegate = Action<type> (type parameter);

上面的代码显然不会也不会按原样运行,但我怎样才能使它工作?我能让它发挥作用吗?

最终,我有一本字典词典&lt;类型,列表&lt;行动&lt; &GT; &gt;,它包含应该将该类型的对象作为参数的类型和委托列表。

应该执行类似这样的事情:

myDict[myType][i] (objectOfMyType);

任何建议都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

正如您所料,您无法直接在字典中使用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});