我有一个 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>
正在通过反射创建对象?
最佳答案
methodInfo.Invoke
接受任意对象参数。因此,编译器无法推断出您指的是哪种具体的 TMessage
类型。
解决方案是显式指定:
SubscribeToPublish((MyMessage o) => methodInfo.Invoke(pair.Value.Node,
new object[] {o}));
关于c# - 如何创建一个 Action<T> 形成一个通过反射给出的对象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29294264/