c# – 如何在不复制元素的情况下从HashSet创建ReadOnlyCollection?

前端之家收集整理的这篇文章主要介绍了c# – 如何在不复制元素的情况下从HashSet创建ReadOnlyCollection?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个私人HashSet< string>这是只读属性的后备字段,它应返回只读集合,以便调用者无法修改集合.所以我试着:
public class MyClass
{
    private readonly HashSet<string> _referencedColumns;

    public ICollection<string> ReferencedColumns { 
        get { return new ReadOnlyCollection<string>(_referencedColumns); }
    }

这不能编译,因为ReadOnlyCollection接受IList< T>.这不是由HashSet< T>实现的.还有另一个包装我可以用来拯救我复制这些物品吗?为了我的目的,只需返回实现ICollection< T>的东西即可. (而不是IList< T>)由HashSet< T>实现.

解决方法

考虑将属性公开为类型IReadOnlyCollection<>相反,它将提供HashSet<>的只读视图.这是实现此方法的有效方法,因为属性getter不需要底层集合的副本.

这不会阻止某人将属性转换为HashSet<>并修改它.如果您担心这一点,请考虑在属性getter中返回_referencedColumns.ToList(),它将创建基础集的副本.

猜你在找的C#相关文章