2010-11-18 278 views
6

これは簡単なことですが、正しい構文を理解できないようです。私は現在、このている: KeyValuePair配列を初期化する

KeyValuePair<string, string>[] kvpArr = new KeyValuePair<string,string>[10]; 
しかし、私は当初、配列のサイズを知らない:

KeyValuePair<string, string>[] kvpArr = new KeyValuePair<string,string>[]; 

しかし、これは動作しているようです。私はKVPのリストを使用することができ、私はおそらくそれを知ることができると知っていますが、これが実際に行えるかどうかを知りたがっています。

+2

あなたは 'Dictionary'を使用していない理由がありますか?これは配列の初期化に関する理論的な質問ですか? – Bobby

+1

理論的な質問ですが、重複したエントリーもあります。 –

+0

ルックアップ機能を必要とし、キーごとに複数の値を処理する必要がある場合は、System.Linq.Lookup クラスの使用を検討することができます。しかし、それは不変です。詳細情報:http://msdn.microsoft.com/en-us/library/bb460184.aspx –

答えて

8

いいえ、配列は常に固定サイズなので、できません。あなたが最初にそのサイズを指定しなかった場合、あなたはどのサイズを使用すると思われますか? には、サイズ自体を指定する必要があります(サイズを推測できるように)サイズまたはを指定する必要があります。たとえば:

int[] x = new int[10]; // Explicit size 
int[] y = new int[] { 1, 2, 3, 4, 5 }; // Implicit size 
int[] z = { 1, 2, 3, 4, 5 }; // Implicit size and type 

List<T>は間違いなくあなたが開始するためのサイズがわからないコレクションのためにあなたの友達です。

7

なぜむしろ

List<KeyValuePair<string, string>> 

を使用していないが、この程度List Class

1

方法を見ていますか?

var kvpArr = new List<KeyValuePair<string,string>>(); 
6

配列は定義によって固定サイズです。あなたは2番目のコード例のようにサイズを指定するか、またはあなたはそれが初期設定から推測することができます:

KeyValuePair<string, string>[] kvpArr = new KeyValuePair<string, string>[] 
{ 
    new KeyValuePair<string, string>(...), 
    new KeyValuePair<string, string>(...), 
    ... 
} 

あなたは可変長構造をしたい場合、私はあなたがList<T>を使用することをお勧め。

アレイの詳細については、C# programming guideを参照してください。

+0

セミコロンがありません:) – 8bitcartridge