我在我的只读属性中返回对字典的引用.如何防止消费者更改我的数据?如果这是一个IList我可以简单地返回它AsReadOnly.我能用字典做些什么吗?
Private _mydictionary As Dictionary(Of String, String)
Public ReadOnly Property MyDictionary() As Dictionary(Of String, String)
Get
Return _mydictionary
End Get
End Property
Run Code Online (Sandbox Code Playgroud) 核心C#库中是否有任何可以为我提供不可变字典的东西?
Java的一些东西:
Collections.unmodifiableMap(myMap);
Run Code Online (Sandbox Code Playgroud)
而且只是为了澄清,我不打算阻止键/值本身被改变,只是字典的结构.如果任何IDictionary的mutator方法被调用(Add, Remove, Clear),我想要快速和大声失败的东西.
在C#中,这两个容器之间的关键区别(在功能或用例方面)是什么?似乎没有任何信息可以在Google上比较这些信息.
System.Collections.ObjectModel.ReadOnlyDictionary System.Collections.Immutable.ImmutableDictionary
我知道ImmutableDictionary是线程安全的.ReadOnlyDictionary也是如此吗?
我有一个Dictionary<string, List<string>>并希望将该成员公开为只读.我看到我可以将它作为一个返回IReadOnlyDictionary<string, List<string>>,但我无法弄清楚如何将它作为一个返回IReadOnlyDictionary<string, IReadOnlyList<string>>.
有没有办法做到这一点?在c ++中,我只是使用const,但C#没有.
请注意,IReadOnlyDictionary在这种情况下简单地使用a 没有帮助,因为我希望只读取值.看来唯一的方法是构建另一个IReadOnlyDictionary,并向它们添加IReadOnlyList.
另一个我不会兴奋的选择是创建实现接口IReadOnlyDictionary>的包装器,并让它保存原始实例的副本,但这似乎有点过分.