0

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

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

我怎样才能做到这一点?

4

2 回答 2

1

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

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

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

于 2013-01-30T14:43:34.220 回答
0

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

于 2013-01-30T14:42:10.667 回答