如何构建只读字典?

时间:2018-02-27 13:33:21

标签: c# initialization constants

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

public static readonly Dictionary<char, LetterImage> letters;

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

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

1 个答案:

答案 0 :(得分:4)

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

fclose($a1);
fclose($b1);
fclose($c1);

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

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) } } 修饰符不会影响存储在字段中的对象的可变性。如果将普通字典存储在只读字段中,您仍然可以改变字典,只需修改字段即可。