声明具有键、值的哈希表
本文关键字:哈希表 声明 | 更新日期: 2023-09-27 18:02:59
我在C# 2.0中。
我想知道是否可以声明一个用键和值启动的Hashtable
const。我知道数组是可能的:
public static string[] ColumnsNames =
{ "string1", "string2", "string3", "string4"
, "string5", "string6", "string7" };
但是我们如何用哈希表做到这一点。
这在 C# 2.0 中无法完成。该语言不支持它。语言规范在这里,没有提到内联字典初始化。
C# 3.0 确实允许字典初始化,类似于您在问题中描述的数组初始化(此处为语言规范(。下面是一个示例:
var dictionary = new Dictionary<string, string> {
{"key1", "value1"},
{"key2", "value2"}
};
相信这应该有效。
public Hashtable hash = new Hashtable()
{
{ "string1", 1 },
{ "string2", 2 }
}
使用 C# 3 集合初始值设定项创建静态只读字段很容易,该字段仍可面向 .NET 2。不过,使用 Dictionary<string, string>
而不是 Hashtable
(除非真的必须1,否则不要使用非泛型集合(。
这不是你可以用const
声明的编译时常量,但我希望你不是真的在const
之后。
private static readonly Dictionary<string, string> Foo
= new Dictionary<string, string>
{
{ "Foo", "Bar" },
{ "Key", "Value" },
{ "Something", "Else" }
};
在 C# 2 中没有类似的东西,如果你真的必须使用它的话。你真的还在使用 Visual Studio 2005 吗?不要忘记,您仍然可以使用 C# 3 和 4 以 .NET 2 为目标...
编辑:如果你真的想用C# 2和哈希表来做,你可以写一个静态方法,像这样:
public static Hashtable CreateHashtable(params object[] keysAndValues)
{
if ((keysAndValues.Length % 2) != 0)
{
throw new ArgumentException("Must have an even number of keys/values");
}
Hashtable ret = new Hashtable();
for (int i = 0; i < keysAndValues.Length; i += 2)
{
ret[keysAndValues[i]] = keysAndValues[i + 1];
}
return ret;
}
然后:
private static readonly Hashtable Foo = HashtableHelper.CreateHashtable(
"key1", "value1", "key2", 10, "key3", 50);
不过我真的不建议这样做...
<小时 />1 如果您使用的是 C# 3,则相同的语法适用于Hashtable
,但如果可能的话,使用泛型集合确实非常值得。
你的意思
是Dictionary<string, string> DDD = new Dictionary<string, string> { { "A", "B" }, { "X", "Y" }, { "Z", "A" } };
您应该使用 Dictionary
.平均而言,Hastable
比字典慢约1/3(主要是由于实现(。此外,它已经过时了。