如何初始化 ReadOnlyDictionary?
How to initialise ReadOnlyDictionary?
我有一个不变的字典,公开在 class.
目前我的代码看起来像
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class FooClass
{
private static ReadOnlyDictionary<string, byte> _validRevisions
= new ReadOnlyDictionary<string, byte>(
new Dictionary<string, byte>() {
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
} );
public static ReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;
// other FooClass contents...
}
我使用了支持字段 _validRevisions
,因为我想不出更好的方法来创建共享常量字典 属性。有没有更好的方法来管理这个,或者我应该把这个字段设为 public?
我的主要问题是有没有更短的方法来初始化 _validRevisions
字段本身?创建内联字典以将其传递到字典(碰巧是只读的)似乎有点……代码味道。是吗?有没有更好的方法?
编辑:我刚刚注意到关于 ROD 的另一件事,没有方法可以支持检查它是否包含给定值...是否有与它的只读相关的原因?
ReadOnlyDictionary<TKey, TValue>
is just a wrapper around a normal dictionary and there is only one constructor 初始化它需要另一个 Dictionary
实例。
所以没有,没有更短的方法。但是我会使用 static constructor 来初始化复杂的静态对象:
private static ReadOnlyDictionary<string, byte> _validRevisions;
static FooClass()
{
IDictionary<string, byte> dict = new Dictionary<string, byte>() {
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
};
_validRevisions = new ReadOnlyDictionary<string, byte>(dict);
}
如果您不介意使用 IReadOnlyDictionary
而不是 ReadOnlyDictionary
,您可以使用它,因为 Dictionary
实现了 IReadOnlyDictionary
:
private static IReadOnlyDictionary<string, byte> _validRevisions
= new Dictionary<string, byte>
{
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
};
public static IReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;
我有一个不变的字典,公开在 class.
目前我的代码看起来像
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class FooClass
{
private static ReadOnlyDictionary<string, byte> _validRevisions
= new ReadOnlyDictionary<string, byte>(
new Dictionary<string, byte>() {
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
} );
public static ReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;
// other FooClass contents...
}
我使用了支持字段 _validRevisions
,因为我想不出更好的方法来创建共享常量字典 属性。有没有更好的方法来管理这个,或者我应该把这个字段设为 public?
我的主要问题是有没有更短的方法来初始化 _validRevisions
字段本身?创建内联字典以将其传递到字典(碰巧是只读的)似乎有点……代码味道。是吗?有没有更好的方法?
编辑:我刚刚注意到关于 ROD 的另一件事,没有方法可以支持检查它是否包含给定值...是否有与它的只读相关的原因?
ReadOnlyDictionary<TKey, TValue>
is just a wrapper around a normal dictionary and there is only one constructor 初始化它需要另一个 Dictionary
实例。
所以没有,没有更短的方法。但是我会使用 static constructor 来初始化复杂的静态对象:
private static ReadOnlyDictionary<string, byte> _validRevisions;
static FooClass()
{
IDictionary<string, byte> dict = new Dictionary<string, byte>() {
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
};
_validRevisions = new ReadOnlyDictionary<string, byte>(dict);
}
如果您不介意使用 IReadOnlyDictionary
而不是 ReadOnlyDictionary
,您可以使用它,因为 Dictionary
实现了 IReadOnlyDictionary
:
private static IReadOnlyDictionary<string, byte> _validRevisions
= new Dictionary<string, byte>
{
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
};
public static IReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;