【发布时间】:2010-09-01 08:34:40
【问题描述】:
在 C# 中,我想创建一个通用方法:
- 接受 MethodInfo 对象作为参数。
- 返回调用 MethodInfo 时返回的对象。
我感到困惑的根源在于,我希望该方法被通用类型化为与传入的 MethodInfo 对象相同的返回类型。
【问题讨论】:
标签: c# .net generics reflection
在 C# 中,我想创建一个通用方法:
我感到困惑的根源在于,我希望该方法被通用类型化为与传入的 MethodInfo 对象相同的返回类型。
【问题讨论】:
标签: c# .net generics reflection
你不能这样做。根据定义,泛型是一种编译时构造,而特定 MethodInfo 的返回类型仅在运行时才知道(当您收到特定的 MethodInfo 实例时),并且会因调用而异。
【讨论】:
MethodInfo 的实例,而不是其他类型的实例。这是有道理的,因为MethodInfo 是您从反射中得到的。当然,如果你真的知道它将在编译时返回的类型,你可以用强制转换来包装它,但这首先违背了这样做的目的。
帕维尔·米纳耶夫是对的,
在这种情况下我的建议(当然我不知道整个上下文)是使用返回动态类型的方法,当然是不会输入的。
public dynamic MyMethod(MethodInfo methodInfo)
或者既然你知道返回类型是什么,就把它放在方法调用中:
public T MyMethod<T>(MethodInfo methodInfo)
当然,您会在映射转换的方法中遇到麻烦。 但您也可以使用 lambda 将转换放入参数中,例如:
public T MyMethod<T>(MethodInfo methodInfo, Func<object, T> conversion)
我觉得方法的调用会很清楚,比如:
Console.WriteLine(MyMethod(methodInfo, (a) => Convert.ToString(a)));
【讨论】: