在C#我想要创建一个通用的方法:C#通用方法+反射问题
- 接受一个MethodInfo对象作为参数。
- 返回调用MethodInfo时返回的对象。
我混乱的根源是,我想的方法被统称键入相同的返回类型为MethodInfo对象是被传入。
在C#我想要创建一个通用的方法:C#通用方法+反射问题
我混乱的根源是,我想的方法被统称键入相同的返回类型为MethodInfo对象是被传入。
你不能做到这一点。根据定义,泛型是编译时构造,而特定的返回类型是只在运行时才知道的(当您收到特定的MethodInfo
实例时),并且会随呼叫而改变。
帕维尔Minaev是正确的,
我在这种情况下(当然我不知道整个上下文)的建议是使用返回动态类型,当然是不会被类型化的方法。
或者因为你知道什么是返回类型,把在方法调用:
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)));
我不知道,如果只是说这不可能是公平的。例如,你可以创建一个包装器MethodInfo,它确保它返回类型T的一个对象,并且因此仍然受益于编译时泛型(只要你的用例至少可以确保你在编译时知道T)。 –
2013-03-22 20:57:20
该问题要求该方法采用'MethodInfo'的实例,而不是其他类型的实例。这是有道理的,因为'MethodInfo'是你从Reflection得到的。当然,如果你确实知道它将在编译时返回的类型,你可以用一个转换来包装它,但是这首先打破了所有这些目标。 – 2013-03-25 21:06:52
那么,我在设想一个想要做这件事的场景时遇到了麻烦,并且在编译时不知道返回类型 - 如果您不这样做,那么首先对泛型没有任何好处。如果你这样做,那么在例如扫描程序集的用例中找到匹配特定格式(包括返回类型)的方法并将它们聚合为MethodInfo对象,例如作为模板库的一部分。 – 2013-03-25 22:52:52