如何正确使用IReadOnlyDictionary?

时间:2015-09-14 08:47:50

标签: c# dictionary readonly-collection

来自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公开只读字典?

1 个答案:

答案 0 :(得分:16)

.NET 4.5引入了您可以使用的ReadOnlyDictionary类型。它有一个接受现有字典的构造函数。

在定位较低版本的框架时,请按照Is there a read-only generic dictionary available in .NET?Does C# have a way of giving me an immutable Dictionary?中的说明使用包装器。

请注意,使用后一类时,集合初始化程序语法不起作用;编译为Add()次调用。