如何初始化ReadOnlyDictionary?
我有一个在课堂上暴露的不变的字典。
目前我的代码看起来像
using System.Collections.Generic; using System.Collections.ObjectModel; public class FooClass { private static ReadOnlyDictionary _validRevisions = new ReadOnlyDictionary( new Dictionary() { { "1.0", 0x00 }, { "1.1", 0x01 }, { "1.2", 0x02 }, { "1.3", 0x03 } } ); public static ReadOnlyDictionary ValidRevisions => _validRevisions; // other FooClass contents... }
我使用了支持字段_validRevisions
因为我无法找到创建共享常量字典属性的更好方法。 是否有更简洁的方法来管理这个或者我应该让这个领域公开?
我的主要问题是有一个更短的方法来初始化_validRevisions
字段本身? 创建一个内联字典以将其传递到一个字典(恰好是只读)似乎有点……代码味道。 是吗? 有没有更好的办法?
编辑:关于ROD的另一件事我刚才注意到,没有方法可以支持检查它是否包含给定的值…是否有与之相关的原因’只读 – 是什么?
如果你不介意使用IReadOnlyDictionary
而不是ReadOnlyDictionary
,你可以使用它,因为Dictionary
实现了IReadOnlyDictionary
:
private static IReadOnlyDictionary _validRevisions = new Dictionary { { "1.0", 0x00 }, { "1.1", 0x01 }, { "1.2", 0x02 }, { "1.3", 0x03 } }; public static IReadOnlyDictionary ValidRevisions => _validRevisions;
ReadOnlyDictionary
只是一个普通字典的包装器,只有一个构造函数来初始化它,它接受另一个Dictionary
实例。
所以不 ,没有更短的路。 但我会使用静态构造函数初始化复杂的静态对象:
private static ReadOnlyDictionary _validRevisions; static FooClass() { IDictionary dict = new Dictionary() { { "1.0", 0x00 }, { "1.1", 0x01 }, { "1.2", 0x02 }, { "1.3", 0x03 } }; _validRevisions = new ReadOnlyDictionary(dict); }