【问题标题】:Calling a method with a dynamic return type using a Type object使用 Type 对象调用具有动态返回类型的方法
【发布时间】:2013-01-30 14:39:27
【问题描述】:

假设我有一个方法定义如下:

public T InvokeMethod<T>(string serviceName, string methodName, params object[] args)

假设我想用 Type 对象调用它,如下所示,它不起作用:

int i = 100;
Type x = i.GetType();
invoker.InvokeMethod<x>(method.Item1, method.Item2, null);

我知道我可以通过实际指定如下类型来调用此方法,但我希望它是动态的。

invoker.InvokeMethod<int>(method.Item1, method.Item2, null);

我怎样才能做到这一点?

【问题讨论】:

  • 你尝试过对象的基本类型吗?
  • 我还没有完全考虑到这个注释,但是每种类型的重载呢?
  • 你在做什么类型的。你在定义返回类型吗?
  • 它使用对象工作。谢谢!
  • invoker.InvokeMethod(method.Item1, method.Item2, null) 有效。我想我并没有完全想好要如何使用它。

标签: c# .net wcf dynamic methods


【解决方案1】:

因为 x 不是可以在泛型类中使用的类型,所以 x 是 Type 类型的实例。这是在运行时计算的。泛型类需要一个类名,在编译时计算。这个答案更好地解释了这一点:

https://stackoverflow.com/a/7120375/

从根本上说,x 是一个类的实例,但在invoker.InvokeMethod&lt;int&gt; 中,int 是一个类的名称。

【讨论】:

    【解决方案2】:

    我知道您可能不喜欢我的回答,但在 WCF 中使用泛型并没有多大意义,因为所有合同都必须可转换为 WSDL,因此无论如何您都必须使用 KnownType 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多