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 回答