[英]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.