duk*_*ukc 2 c# initialization constants
因此,我正在设计一个全局常量,该常量将保存程序中不同字符的数据。我认为这System.Collections.Generic.Dictionary是我的数据类型,因为它允许按字符快速搜索。声明看起来像这样:
public static readonly Dictionary<char, LetterImage> letters;
Run Code Online (Sandbox Code Playgroud)
(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()
});
Run Code Online (Sandbox Code Playgroud)
如果您有更复杂的代码来初始化字典,则也可以使用静态构造函数(可以在静态构造函数中分配只读字段)
class Program
{
public static readonly ReadOnlyDictionary<char, LetterImage> dictionary;
static Program()
{
var mutable = new Dictionary<char, LetterImage>();
// Initalize
dictionary = new ReadOnlyDictionary<char, LetterImage>(mutable)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,readonly修饰符不会影响字段中存储的对象的可变性。如果将普通词典存储在只读字段中,则仍然可以对词典进行突变,只需修改该字段即可。
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |