假设我的方法定义如下:
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);
我该如何做到这一点?
答案 0 :(得分:1)
因为x不是可以在泛型类中使用的类型,所以x是Type
类型的实例。这是在运行时计算的。泛型类需要一个在编译时计算的类名。在这个答案中可以更好地解释这一点:
https://stackoverflow.com/a/7120375/
从根本上说,x是一个类的实例,但在invoker.InvokeMethod<int>
中,int
是一个类的名称。
答案 1 :(得分:0)
我知道你可能不喜欢我的答案,但是在WCF中使用泛型并没有多大意义,因为所有合同都必须可以翻译成WSDL,因此你必须使用KnownType
属性。