2010-11-18 22 views
6

Sembra una cosa semplice da fare, ma non sembra che sia in grado di elaborare la sintassi corretta. Al momento ho questo:Inizializzazione di un array KeyValuePair

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

Tuttavia, questo sembra funzionare:

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

Ma io non so la dimensione della matrice inizialmente. So che posso usare una lista di KVP e probabilmente lo farò, ma volevo solo sapere come/se questo potrebbe effettivamente essere fatto.

+2

C'è un motivo per cui non si sta usando un 'dizionario' ... o si tratta di una domanda teorica sull'inizializzazione degli array? – Bobby

+1

È una domanda teorica - ma avrò anche voci duplicate. –

+0

Se si desidera funzionalità di ricerca ed è necessario gestire più valori per chiave, è possibile considerare l'utilizzo della classe System.Linq.Lookup . È immutabile però. Maggiori informazioni: http://msdn.microsoft.com/en-us/library/bb460184.aspx –

risposta

8

No, non è possibile farlo perché un array ha sempre una dimensione fissa. Se non si specifica quella dimensione per iniziare, quale dimensione ti aspetteresti di utilizzare? Si o è necessario specificare la dimensione stessa o il contenuto (che consente di determinare la dimensione). Per esempio:

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> è sicuramente il tuo amico per le collezioni in cui non si conosce la dimensione di partenza.

7

Perché non piuttosto utilizzare

List<KeyValuePair<string, string>> 

Dai un'occhiata alla List Class

1

ne dici di questo?

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

Gli array sono di dimensioni fisse per definizione. È possibile specificare le dimensioni come nel tuo esempio secondo codice, o si può avere dedotto dal l'inizializzazione:

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

Se si desidera una struttura di lunghezza variabile, vi suggerisco di utilizzare il List<T>.

Per ulteriori informazioni sugli array, vedere C# programming guide.

+0

Ti manca un punto e virgola :) – 8bitcartridge