【问题标题】:How to make a dictionary read only via property? [duplicate]如何通过属性使字典只读? [复制]
【发布时间】:2018-06-27 22:40:54
【问题描述】:

您好,我有一段简单的代码,其中我有一个字典的私有字段,以及一个通过 get 公开它的属性。

但是我仍然可以从其他类插入到该字典中,并且想知道如何防止这种情况发生,所以我只能通过它定义的类中的字段而不是通过公开它的属性插入字典?

这是我的字段/属性代码:

    private Dictionary<UnitType, Entity> _systems;
    public Dictionary<UnitType, Entity> Systems => _systems;

在其他课程中,我仍然能够做到MyClass.Systems.Add(),这是我想要阻止的。

这可能吗?

【问题讨论】:

  • 将您的字典保存在私有财产或字段中。使用第二个(公共)属性来公开包装在 ReadOnlyDictionary 中的字典
  • @elgonzo 所以我的只读字典每次我调用它时都会转换字典?
  • 没有。我说“...字典 wrapped 在 ReadOnlyDictionary 中”。查找 ReadOnlyDictionary 的文档(我在第一条评论中链接)。只需将字典转换为 IReadOnlyDictionary 仍然允许它再次转换为普通可写 Dictionary&lt;TKay,TValue&gt; ...
  • 但是,如果您只是想让 Intellisense 停止对您提出修改方法的建议,那么您当然可以放弃使用 ReadOnlyDictionary 包装器并将您的字典转换为 IReadOnlyDictionary
  • 好的,谢谢你的帮助,是的,这个项目只需要清理智能感知就足够了 :)

标签: c# collections scope


【解决方案1】:

这个怎么样:

private Dictionary<UnitType, Entity> _systems;
public IReadOnlyDictionary<UnitType, Entity> Systems => _systems;

这只会在公共属性中公开 _systems 字典的只读功能。

【讨论】:

  • 谢谢,这可以满足我的需要:)
  • 很高兴我能帮上忙! :)
  • 请注意,他们仍然可以将其转换回字典并对其进行修改,因此它只能防止意外写入
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
相关资源
最近更新 更多