声明具有键,值的哈希表

时间:2011-07-19 12:09:49

标签: c# .net .net-2.0 c#-2.0

我在C#2.0。

我想知道是否可以使用key& amp声明一个Hashtable const。值。我知道数组是可能的:

public  static string[] ColumnsNames = 
{ "string1", "string2", "string3", "string4"
, "string5", "string6", "string7" };

但我们怎么能用Hashtables做到这一点。

5 个答案:

答案 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(主要是由于实现)。此外,它是过时的