gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:35:35 24 4
gpt4 key购买 nike

我有一个私有(private) 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<> 的只读 View .这是一种有效的实现方式,因为属性 getter 不需要基础集合的副本。

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

关于c# - 如何在不复制元素的情况下从 HashSet 创建 ReadOnlyCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com