[英]Generic method returning generic type
我正在使用一个接受类型的restclient,后来转换为正确的IRestResponse
。
IRestResponse<MyClassA> response = client.Execute<MyClassA>();
由于MyClassA
也可以MyClassB
或MyClassC
我想过做这可能处理这个的通用方法。 但没有任何运气。 这是我的尝试:
公共接口IRestClient {IRestResponse response = PerformExecuteClient()
private RestResponse<T> PerformExecuteClient<T>() {
return client.Execute<T>();
}
编译器告诉我client.Execute<T>
不接受抽象类型。 这是有道理的,但我不知道如何制作这种方法。 我想在这里实现可能吗?
基于一些评论的附加信息。 正如Brains Mains所建议的那样,这种方法不接受抽象类型。
public interface IRestClient{
IRestResponse<T> Execute<T>(IRestRequest request) where T : new();
}
你试过这个:
private RestResponse<T> PerformExecuteClient<T>() where T : new()
{
return client.Execute<T>();
}
正如大家在这里指出的那样,你必须遵循界面的通用约束才能使其工作。 如果不这样做,则不会通过传递意外类型来尊重接口合同。
另外where T : new()
意味着你可以像这个new T()
一样实例化T
但是根据定义,抽象类不能实例化,这就是你得到这个错误的原因。
这个 :
where T : new();
意味着T
将在方法内部创建。 但是如何创建抽象类的实例呢? 因此出错了。
客户端对象上的Execute方法可能有一个T: [Something]
约束,您的泛型方法也需要应用。 查看源代码(如果可能)或文档以查看where约束是否应用于泛型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.