我有以下具有以下擴展方法的類:public static class CollectionsExtensions{ public static List<List<T>> Split<T>(this List<T> collection, int size) { if (size == 0) throw new ArgumentException(); var chunks = new List<List<T>>(); var chunkCount = collection.Count / size; if (collection.Count % size > 0) chunkCount++; for (var i = 0; i < chunkCount; i++) chunks.Add(collection.Skip(i * size).Take(size).ToList()); return chunks; }}我使用代碼分析器來幫助指出代碼異味和潛在缺陷,為此我建議將方法的返回類型切換為泛型類型。我嘗試將方法的簽名更改為如下所示:public static List<U<T>> Split<U,T>(this U<T> collection, int size) where U : IEnumerable<T>但不幸的是,它不起作用,所以,有沒有一種正確的方法來定義一個類,該方法可以返回一個 T 類型的 U 集合列表?
2 回答

繁華開滿天機
TA貢獻1816條經驗 獲得超4個贊
當你這么說的時候:
where U : IEnumerable<T>
這意味著 thatU
將是 a List<T>
or some 繼承自 的類型IEnumerable<T>
,因此這意味著您的方法的返回類型List<U>
在這種情況下可以是相同的List<IEnumerable<T>>
or List<List<T>>
。
在使用該方法時,編譯器將解析類型參數U
以注入IEnumerable<T>
提供T
的類型。

大話西游666
TA貢獻1817條經驗 獲得超14個贊
你可以這樣寫:
public static List<U> Split<U, T>(this U collection, int size) where U : IEnumerable<T>
- 2 回答
- 0 關注
- 122 瀏覽
添加回答
舉報
0/150
提交
取消