c#泛型方法+反思问题

时间:2010-08-31 20:39:11

标签: c# .net generics reflection

在C#中,我想创建一个通用方法:

  1. 接受MethodInfo对象作为参数。
  2. 返回调用MethodInfo时返回的对象。
  3. 我混淆的原因是我希望该方法通常被输入与传入的MethodInfo对象相同的返回类型。

2 个答案:

答案 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)));