如果我有类型,例如:
Type type = myObject.GetType ();
如何创建使用该类型对象作为参数的泛型委托?我希望代码类似于:
myDelegate = Action<type> (type parameter);
上面的代码显然不会也不会按原样运行,但我怎样才能使它工作?我能让它发挥作用吗?
最终,我有一本字典词典&lt;类型,列表&lt;行动&lt; &GT; &gt;,它包含应该将该类型的对象作为参数的类型和委托列表。
应该执行类似这样的事情:
myDict[myType][i] (objectOfMyType);
任何建议都将不胜感激。
谢谢!
答案 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});