具有索引支援的集合中的協方差
集合中的協方差允許派生項儲存在為基類型聲明的集合中。然而,預設的協變集合 IEnumerable 缺乏索引支援。
正如發問者所指出的,向上轉換 List
可能的解決方案
從 .NET 4.5 開始,IReadOnlyList
建立協變包裝器
如果需要具有索引支援的可寫集合,可以建立擴充方法來包裝IList< ;T>並僅公開提供所需協變異數的方法子集:
public static class Covariance { public static IIndexedEnumerable<T> AsCovariant<T>(this IList<T> tail) { return new CovariantList<T>(tail); } private class CovariantList<T> : IIndexedEnumerable<T> { // Implementation... } }
此包裝類別CovariantList
透過在 IList
以上是如何透過集合中的索引支援實現協方差?的詳細內容。更多資訊請關注PHP中文網其他相關文章!