……我能做到嗎?
所以我想實作一個 EnumerableSubset 類來處理 API 中的分頁結果:
public interface IEnumerableSubset<T> : IEnumerable<T>{
int Total {get;}
}
public class ListSubset<T> : List<T>, IEnumerableSubset<T>{
public int Total {get;}
ListSubset(IEnumerable<T> items, int total){
AddRange(items);
Total = total;
}
}
所以向下轉換的泛型適用于像 List 這樣的 CLR 列舉:
public IEnumerable<IMyResultObject> GetResults(int skip, int top){
//return interface but pass class type for deserialization
var results = GetResults<MyResultObject>(skip,top);
//results is IEnumerable<MyResultObject>
return results;
}
但不適用于向下轉換的泛型適用于我的型別:
public IEnumerableSubset<IMyResultObject> GetResults(int skip, int top){
//return interface but pass class type for deserialization
var results = GetResults<MyResultObject>(skip,top);
//results is IEnumerableSubset<MyResultObject>
return results;
}
“無效轉換”編譯器錯誤。
我必須創建一個已經在 GetResults 中實體化的 ListSubset(results, results.Total) 的新實體。
所以我的問題是: List 如何設法降低泛型型別,我可以這樣做嗎?
謝謝
uj5u.com熱心網友回復:
您已宣告您的介面在T. 您應該在 中宣告它是協變的T,就像IEnumerable:
public interface IEnumerableSubset<out T> : IEnumerable<T>
到那時,它應該可以作業。
有關 C# 中的泛型變化的更多資訊,請參閱Microsoft 檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519878.html
標籤:C#仿制药可枚举的沮丧
上一篇:如何實作通用的“選項”引數?
