所以,我正在设计一个全局常量,它将为程序保存不同字符的数据。我认为System.Collections.Generic.Dictionary
是我的数据类型,因为它允许按字符快速搜索。声明如下:
public static readonly Dictionary<char, LetterImage> letters;
(LetterImage
是一个自定义结构。它的内容并不重要。)
问题?如何定义Dictionary
的元素?我不能只letters.Add('a', new LetterImage{...})
,因为字典是readonly
,因为我不想要全局变量。我需要一种用文字初始化它的方法。
答案 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)
}
}
修饰符不会影响存储在字段中的对象的可变性。如果将普通字典存储在只读字段中,您仍然可以改变字典,只需修改字段即可。