我在C#2.0。
我想知道是否可以使用key& amp声明一个Hashtable
const。值。我知道数组是可能的:
public static string[] ColumnsNames =
{ "string1", "string2", "string3", "string4"
, "string5", "string6", "string7" };
但我们怎么能用Hashtables做到这一点。
答案 0 :(得分:9)
在C#2.0中无法完成。该语言不支持它。语言规范是here,没有提到内联字典初始化。
C#3.0允许字典初始化类似于您在问题中描述的数组初始化(语言规范here)。这是一个例子:
var dictionary = new Dictionary<string, string> {
{"key1", "value1"},
{"key2", "value2"}
};
答案 1 :(得分:8)
使用C#3 collection initializers很容易,它仍然可以针对.NET 2.虽然使用Dictionary<string, string>
而不是Hashtable
(除非你真的有,否则不要使用非通用集合至 1 ):
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
,但如果可能的话,确实非常值得使用泛型集合。
答案 2 :(得分:8)
相信这应该有用。
public Hashtable hash = new Hashtable()
{
{ "string1", 1 },
{ "string2", 2 }
}
答案 3 :(得分:1)
你的意思是
Dictionary<string, string> DDD = new Dictionary<string, string> { { "A", "B" }, { "X", "Y" }, { "Z", "A" } };
答案 4 :(得分:0)
您应该使用Dictionary
。平均而言Hastable
比词典慢约 1/3(主要是由于实现)。此外,它是过时的。