c# - 如何创建一个 Action<T> 形成一个通过反射给出的对象方法?

标签 c# .net generics reflection lambda

我有一个 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/

相关文章:

c# - 如何为要与 XmlSerializer 一起使用的可选 XML 元素修饰/定义类成员?

c# - 将 Libvlc videoview 包含到布局中

c# - 反序列化嵌套类时不希望出现 xmlns =''

.net - 通过属性指定的转换器与 json.net 中的全局转换器等效

java - 在 Java 中重写泛型方法的正确方法

java - 如何使用 Java 1.8 实现教会数字

c# - WPF 浏览器调用脚本

c# - 如何在 ASP.NET MVC 中使用多个表单元素

c# - JSON 反序列化中的类型提示

c# - 如何在 java 中实现此 C# 通用接口(interface)?