协变和 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中文网其他相关文章!