協變和IList:擴展索引查找的集合
在C# 中,協變集合允許使用子集合從父集合中檢索專案.然而,標準 IEnumerable
Since List
為了解決此問題,.NET 4.5 及更高版本引入了 IReadOnlyList
兩個清單
但是,如果您需要同時具有 get 和 set 索引器的協變集合,則選項是有限的。一個可能的解決方案是將現有的 IList
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> { private readonly IList<T> tail; public T this[int index] => tail[index]; public IEnumerator<T> GetEnumerator() => tail.GetEnumerator(); public int Count => tail.Count; } } public interface IIndexedEnumerable<out T> : IEnumerable<T> { T this[int index] { get; } int Count { get; } }
此方法提供了一個同時支援IEnumerable
以上是如何在C#中透過索引尋找實現協變集合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!