在C#中,我想创建一个通用方法:
我混淆的原因是我希望该方法通常被输入与传入的MethodInfo对象相同的返回类型。
答案 0 :(得分:2)
你不能这样做。根据定义,泛型是一个编译时构造,而特定MethodInfo
的返回类型只是在运行时(当您收到特定的MethodInfo
实例时)已知,并且将从调用中更改打电话。
答案 1 :(得分:1)
Pavel Minaev是对的,
我在这种情况下的建议(当然我不知道整个上下文)是使用一个返回动态类型的方法,当然是不会输入的。
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)));