加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:12:51 所属栏目:百科 来源:网络整理
导读:我有一个私人HashSet string这是只读属性的后备字段,它应返回只读集合,以便调用者无法修改集合.所以我试着: public class MyClass{ private readonly HashSetstring _referencedColumns; public ICollectionstring ReferencedColumns { get { return new Re
我有一个私人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(),它将创建基础集的副本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读