使用Type对象调用具有动态返回类型的方法

时间:2013-01-30 14:39:27

标签: c# .net wcf dynamic methods

假设我的方法定义如下:

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

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我知道你可能不喜欢我的答案,但是在WCF中使用泛型并没有多大意义,因为所有合同都必须可以翻译成WSDL,因此你必须使用KnownType属性。