2011-07-19 14 views
4

私はC#2.0です。ハッシュテーブルとキー、値の宣言

Hashtableは、&という値で開始されたconstを宣言することが可能かどうかを知りたいと思います。私はそれが配列で可能であることを知っています:

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

しかし、私たちはそれをどのようにHashtablesで行うことができますか?

+0

constフィールドまたは静的フィールドが必要ですか? Constは 'Hashtable'では利用できません – VMAtm

+0

@Nabil Koroghli - なぜこれをやりたいのですか?私は文字列[]が定数ではないことを指摘しなければならない。 –

+0

@Nabil Koroghli - コレクション初期化子を静的変数でなくても使用できることは理解できますか? –

答えて

8

C#2.0では実行できません。言語はそれをサポートしていません。言語仕様はhereであり、インライン辞書の初期化は記載されていません。

C#3.0では、質問で説明した配列の初期化(言語仕様here)に似た辞書の初期化が可能です。次に例を示します。

var dictionary = new Dictionary<string, string> { 
    {"key1", "value1"}, 
    {"key2", "value2"} 
}; 
8

それはまだDictionary<string, string>の代わりHashtableかかわらを(あなたが本当にに持っていない限り、非ジェネリックコレクションを使用していない)を使用して、.NET 2.をターゲットにすることができますC#3 collection initializers、と簡単です。

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 ...

EDITと.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); 

私は本当にお勧めしないと思います...しかしその


C#3を使用している場合は同じ構文がHashtableで動作しますが、可能であれば一般的なコレクションを使用する価値があります。

+0

これは行がありませんが、C#2のオプションは静的なコンストラクタで静的なHashtableまたはDictionaryをインスタンス化して埋めることです。これには、使用前にスタティックメンバを初期化した場合と同じ効果があります。 –

8

これはうまくいくはずです。

public Hashtable hash = new Hashtable() 
{ 
    { "string1", 1 }, 
    { "string2", 2 } 
} 
+0

これはエラーをスローします:配列に初期化子が多すぎます。 – SurajS

1

あなたがDictionaryを使用する必要があります

Dictionary<string, string> DDD = new Dictionary<string, string> { { "A", "B" }, { "X", "Y" }, { "Z", "A" } }; 
0

を意味します。平均してHastableは、(主に実装されているため)の約1/3より遅い約です。さらには廃止されましたです。

+0

私はそれが実際に質問されたことではないことを意味します。更新された回答で6歳以上の質問に回答する場合は、少なくともそのような考え方に沿って質問に回答することができます。 'ReadOnlyDictionary'か何かを推薦します。 –

関連する問題