首页 >后端开发 >C++ >如何通过集合中的索引支持实现协方差?

如何通过集合中的索引支持实现协方差?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-28 19:04:15144浏览

How Can I Achieve Covariance with Index Support in Collections?

具有索引支持的集合中的协方差

集合中的协方差允许派生项存储在为基类型声明的集合中。然而,默认的协变集合 IEnumerable 缺乏索引支持。

正如发问者所指出的,向上转换 List 是很困难的。到 IList可以允许添加非狗动物,这在原始列表中是不允许的。

可能的解决方案

从 .NET 4.5 开始,IReadOnlyList;和 IReadOnlyCollection提供协变行为和索引查找。但是,它们是只读的。

创建协变包装器

如果需要具有索引支持的可写集合,可以创建扩展方法来包装 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 实现 IIndexedEnumerable,它提供索引器和计数属性。

通过在 IList 上调用 AsCovariant(),您可以获取具有索引支持的协变集合,允许您检索和迭代派生项,同时维护指定的基本类型。

以上是如何通过集合中的索引支持实现协方差?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn