【问题标题】:Dynamic object: Get the sub generic type and provide it to another method动态对象:获取子泛型类型并将其提供给另一个方法
【发布时间】:2015-02-02 10:36:41
【问题描述】:

我有一个方法,它基本上接收一个dynamic 对象。这是由于动态调度,这里不讨论为什么我有一个dynamic 输入。

我知道这个dynamic 对象代表一个类型ASpecialClass<T>,其中T 在编译时是未知的。有没有办法提取T 类型并将其交给另一个方法?

喜欢:

public void DoSomething(dynamic inputObject)//At this point, I know that it implements ASpecialClass<T>, but I don't know what is the T type
{
    extracType(InputObject);
    CallOtherMethod<With_the_extracted_Type>(inputObject);
}

这里有两件事:

  1. 有没有办法提取参数的类型T
  2. 是否可以将其提供给另一个通用的方法?

谢谢

【问题讨论】:

标签: c# generics dynamic-dispatch


【解决方案1】:

问题 1 的答案:

static IEnumerable<Type> GetGenericTypeArgument(dynamic inputObject)
    {
        var genType = inputObject.GetType();
        return genType.GetGenericArguments();
    }

问题 2 的答案:

您需要通过传递答案 1 中提供的泛型参数来使用反射来调用泛型方法。 这个已经回答了@How do I use reflection to call a generic method?

【讨论】:

  • 非常感谢您提出问题的第 1 部分,这就是我要找的。关于第2部分,有没有办法避免反射?
  • 如果你不想使用反射,你总是可以使用 Linq/Lambda 表达式。如何做到这一点有一个答案@@stackoverflow.com/questions/2850265/…
  • 不错。使用 lambda 表达式是否更有效?
  • 是的 lambda 表达式比反射更有效。阅读stackoverflow.com/questions/4803272/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2017-12-23
相关资源
最近更新 更多