因此,我正在设计一个全局常量,它将保存程序不同字符的数据。我认为System.Collections.Generic.Dictionary
是我的数据类型,因为它允许按字符进行非常快速的搜索。声明如下所示:
public static readonly Dictionary<char, LetterImage> letters;
( LetterImage
是一个自定义结构。它的内容并不重要。)
问题?如何定义 Dictionary
的元素?我不能只是 letters.Add('a', new LetterImage{...})
因为字典是readonly
,因为我不需要全局变量。我需要一种用文字初始化它的方法。
最佳答案
您可以使用适当的集合来确保字典确实是只读的,即 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
修饰符不会影响存储在字段中的对象的可变性。如果您将普通字典存储在只读字段中,您仍然可以更改字典,只需修改该字段即可。
关于c# - 如何构建只读字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49009940/