gpt4 book ai didi

c# - 为什么 C# 中没有真正的不可变集合?

转载 作者:行者123 更新时间:2023-11-30 13:32:56 25 4
gpt4 key购买 nike

<分区>

我目前正在学习 C#,并且我有一个包含 ISet 的类。我不希望客户端直接修改这个集合,大多数客户端只添加和删除,我通过我的类提供访问器来执行此操作。

但是,我有一位客户希望了解更多有关这套装置及其内容的信息。我真的不想为这个客户端使用很多方法来混淆包装类本身,所以我更希望能够以不可变的方式返回集合本身。

我发现我不能 - 嗯,不是真的。我似乎唯一的选择是:

  1. 返回一个 IEnumerable(否:限制性功能);
  2. ReadOnlyCollection(不:这是一个列表);
  3. 返回一个副本(否:不好的形式恕我直言,允许客户修改返回的集合,可能不知道它不会改变真实的对象,而且它有性能开销);
  4. 实现我自己的 ReadOnlySet(否:需要从 ISet 派生,因此意味着我需要实现修改器,可能会触发异常,我宁愿编译时出现错误,而不是运行时)。

我错过了什么吗?我是不是蛮不讲理的?在我的包装器上提供全套访问器是我唯一的选择吗?我为绝大多数客户保持包装清洁的初衷是否错误?

所以两个问题:

  1. 为什么没有标准的 C# 不可变 Collection 接口(interface)?这似乎是一个相当合理的要求?

  2. 为什么 ReadOnlyCollection 令人讨厌地称为 ReadOnlyCollection 而它实际上是一个 ReadOnlyList?我打算硬着头皮使用它,直到我发现它是一个列表(我使用了一个集合)。

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