如何正确使用IReadOnlyDictionary
本文关键字:IReadOnlyDictionary 何正确 | 更新日期: 2023-09-27 18:12:33
From msdn:
表示键/值对的通用只读集合。
但是考虑如下:
class Test
{
public IReadOnlyDictionary<string, string> Dictionary { get; } = new Dictionary<string, string>
{
{ "1", "111" },
{ "2", "222" },
{ "3", "333" },
};
public IReadOnlyList<string> List { get; } =
(new List<string> { "1", "2", "3" }).AsReadOnly();
}
class Program
{
static void Main(string[] args)
{
var test = new Test();
var dictionary = (Dictionary<string, string>)test.Dictionary; // possible
dictionary.Add("4", "444"); // possible
dictionary.Remove("3"); // possible
var list = (List<string>)test.List; // impossible
list.Add("4"); // impossible
list.RemoveAt(0); // impossible
}
}
我可以很容易地将IReadOnlyDictionary
转换为Dictionary
(任何人都可以)并改变它,而List
有很好的AsReadOnly
方法。
问题:如何正确使用IReadOnlyDictionary
使公共确实只读字典
。NET 4.5引入了可以使用的ReadOnlyDictionary
类型。它有一个接受现有字典的构造函数。
当目标是较低的框架版本时,使用包装器,如。net中是否有可用的只读通用字典中所解释的那样?c#有办法给我一个不可变的字典吗?
请注意,当使用后一个类时,集合初始化器语法将不起作用;编译成Add()
调用