如何正确使用IReadOnlyDictionary?
来自msdn :
表示键/值对的通用只读集合。
但请考虑以下事项
class Test { public IReadOnlyDictionary Dictionary { get; } = new Dictionary { { "1", "111" }, { "2", "222" }, { "3", "333" }, }; public IReadOnlyList List { get; } = (new List { "1", "2", "3" }).AsReadOnly(); } class Program { static void Main(string[] args) { var test = new Test(); var dictionary = (Dictionary)test.Dictionary; // possible dictionary.Add("4", "444"); // possible dictionary.Remove("3"); // possible var list = (List)test.List; // impossible list.Add("4"); // impossible list.RemoveAt(0); // impossible } }
我可以轻松地将IReadOnlyDictionary
为Dictionary
(任何人都可以)并更改它,而List
有很好的AsReadOnly
方法。
问题:如何正确使用IReadOnlyDictionary
来制作公共的只读字典?
.NET 4.5引入了您可以使用的ReadOnlyDictionary
类型。 它有一个接受现有字典的构造函数。
在针对较低版本的框架时,请使用包装器,如.NET中是否有只读通用字典? C#有办法给我一个不可变的字典吗? 。
请注意,使用后一个类时,集合初始化程序语法将不起作用; 被编译为Add()
调用。