如何正确使用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使公共确实只读字典

如何正确使用IReadOnlyDictionary

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

当目标是较低的框架版本时,使用包装器,如。net中是否有可用的只读通用字典中所解释的那样?c#有办法给我一个不可变的字典吗?

请注意,当使用后一个类时,集合初始化器语法将不起作用;编译成Add()调用

相关文章:
  • 没有找到相关文章