【问题标题】:How to construct a read-only Dictionary? [duplicate]如何构造一个只读字典? [复制]
【发布时间】:2018-02-27 13:33:21
【问题描述】:

所以,我正在设计一个全局常量,它将保存程序中不同字符的数据。我认为System.Collections.Generic.Dictionary 是我的数据类型,因为它允许按字符快速搜索。声明如下所示:

public static readonly Dictionary<char, LetterImage> letters;

LetterImage 是一个自定义结构。它的内容并不重要。)

问题?如何定义Dictionary 的元素?我不能只是letters.Add('a', new LetterImage{...}),因为字典是readonly,因为我不想要一个全局变量。我需要一种用文字初始化它的方法。

【问题讨论】:

    标签: c# initialization constants


    【解决方案1】:

    您可以使用适当的集合来确保字典是真正只读的,即ReadOnlyDictionary。你可以内联初始化它

    public static readonly ReadOnlyDictionary<char, LetterImage> dictionary = new ReadOnlyDictionary<string, string>(new Dictionary<char, LetterImage>
    {
        ['a'] = new LetterImage()
    });
    

    如果你有更复杂的代码来初始化字典,你也可以使用静态构造函数(你可以在静态构造函数中分配只读字段)

    class Program
    {
        public static readonly ReadOnlyDictionary<char, LetterImage> dictionary;
        static Program()
        {
            var mutable = new Dictionary<char, LetterImage>();
            // Initalize
            dictionary = new ReadOnlyDictionary<char, LetterImage>(mutable)
        }
    }
    

    注意readonly 修饰符不会影响存储在字段中的对象的可变性。如果您将普通字典存储在只读字段中,您仍然可以对字典进行变异,您只需修改该字段即可。

    【讨论】:

    • 一件很冗长的事情,但可能是最好的,因为它完全符合我的要求。谢谢。
    猜你喜欢
    • 2013-12-20
    • 2023-04-10
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2017-10-14
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多