如何初始化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); }