我有一个void SubscribeToPublish<TMessage>(Action<TMessage> action)
方法。它期望Action<T>
。我有一个纯粹来自Type
的对象,其形式如下:
var Node = Activator.CreateInstance(type);
var methods = type.GetMethods(BindingFlags.Public).Where(methodInfo => methodInfo.GetParameters().Count() == 1).ToList();
methods.ForEach(methodInfo => {
SubscribeToPublish(o => methodInfo.Invoke( pair.Value.Node, o )); // Here I see error cannot be inferred from usage.
});
因此我想知道:如何通过反射创建对象来创建Action<T>
答案 0 :(得分:4)
methodInfo.Invoke
接受任意对象参数。因此,编译器无法推断出您所指的具体TMessage
类型。
解决方案是明确指定:
SubscribeToPublish((MyMessage o) => methodInfo.Invoke(pair.Value.Node,
new object[] {o}));