C# 如何通过属性使字典只读?

C# 如何通过属性使字典只读?,c#,collections,scope,C#,Collections,Scope,嗨,我有一段简单的代码,其中有一个字典的私有字段,以及一个通过get公开它的属性 但是我仍然可以从其他类插入到这个字典中,我想知道如何防止这种情况,这样我就只能通过它定义的类中的字段而不是通过公开它的属性插入到字典中 这是我的字段/属性代码: private Dictionary<UnitType, Entity> _systems; public Dictionary<UnitType, Entity> Systems => _systems;

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

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

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

    private Dictionary<UnitType, Entity> _systems;
    public Dictionary<UnitType, Entity> Systems => _systems;
private Dictionary\u系统;
公共字典系统=>\u系统;
在其他一些类中,我仍然能够执行我想要阻止的
MyClass.Systems.Add()

这可能吗?

这个怎么样:

private Dictionary<UnitType, Entity> _systems;
public IReadOnlyDictionary<UnitType, Entity> Systems => _systems;
private Dictionary\u系统;
公共iRadonlyDictionary系统=>\u系统;

这将在公共属性中仅公开_SystemsDictionary的只读功能。

将字典保存在私有属性或字段中。使用第二个(公共)属性公开包装在@elgonzo中的词典,这样我的只读词典每次调用时都会强制转换词典,对吗?不对。我说“…包装在ReadOnlyDictionary中的词典”。在文档中查找ReadOnlyDictionary(我在第一篇评论中链接)。仅将字典强制转换为
IReadOnlyDictionary
仍将允许它再次转换为正常可写的
dictionary
。。但是,如果您只想Intellisense,请停止使用建议修改方法来困扰您,当然,你可以放弃使用ReadOnlyDictionary包装器,直接将你的字典转换为
IReadOnlyDictionary
。好的,谢谢你的帮助,是的,清理intellisense就足够了:)谢谢,这就完成了我需要的工作:)很高兴我能帮上忙!:)请注意,他们仍然可以将其转换回字典并进行修改,因此只能防止意外写入