2013-06-04 4 views
5

Sono nuovo al C# /. Net e ho un problema con il dizionario di classe. Ho creato un dizionario di gruppi e ha aggiunto una voce (o più voci, la società non ha importanza):Come accedere al dizionario <TKey, TValue> .Item Proprietà in C#

Dictionary<int, ListViewGroup> groups = new Dictionary<int, ListViewGroup>(); 
groups.Add(1, new ListViewGroup("Group1")); 

Vorrei trovare il mio gruppo per la sua chiave. Nella documentazione si dice che esiste una proprietà Item a cui posso accedere direttamente o tramite l'indicizzatore. Tuttavia, quando provo ad accedere direttamente:

ListViewGroup g = groups.Item(1); 

mio compilatore dice che non esiste una definizione per la proprietà dell'oggetto in classe dizionario. Qualcuno può spiegarmi questo per favore? Grazie.

+0

Pro-consiglio: Quando si digita il punto '.' e intellisense si presenta; tutti i metodi, le variabili, le proprietà, gli eventi, ecc. a cui è possibile accedere si troveranno in tale elenco. È un ottimo modo per trovare il metodo che stai cercando, anche se non sai come viene chiamato. – Nolonar

+0

@Nolonar: Non sempre vero: per impostazione predefinita, le opzioni intellisense "nascondono i membri avanzati", il che significa che non ottieni tutto. –

+0

@DanPuzey Vedo. Grazie per l'illuminazione. – Nolonar

risposta

9

Item è un indicizzatore, è possibile verificare che, cercando in definizione:

public TValue this[TKey key] { get; set; } 

Basta usare la sintassi indicizzatore per accedere agli elementi tramite chiave:

ListViewGroup g = groups[1]; 
Console.WriteLine (g.Header); //prints Group1 

Nota: questo getterà KeyNotFoundException se nessuno voce con tale chiave sarebbe presente nel dizionario groups. Ad esempio, groups[2] genererà un'eccezione nel tuo caso.

3

Utilizzare groups[n].

Se si guarda alla the manual per Dictionary<TKey, TValue>.Item, si possono trovare:

Questa struttura offre la possibilità di accedere ad un elemento specifico nella raccolta utilizzando la seguente sintassi C#: myCollection [key] .

Oppure cerca sul web per "C# indicizzatori":

Indexers Tutorial (C#):

Definizione di un indicizzatore consente di creare classi che agiscono come "matrici virtuali". È possibile accedere a istanze di tale classe utilizzando l'operatore di accesso all'array [].

Gli indici, o Item in questo caso, non sono mai direttamente accessibili.

+0

Vuoi dire groups.Item [n]? Perché questo ha lo stesso problema. – Wolf

+0

@Wolf no non lo ha. È davvero d'aiuto se mostri il codice esatto e l'esatto errore di compilazione nella tua domanda. – CodeCaster

+3

L'utilizzo di 'Item' come nome del dizionario nella risposta è altamente fuorviante. –

1

Si sta verificando un errore perché non è presente alcuna proprietà denominata Elemento nella classe del dizionario al livello di base.

Dictionary<int, ListViewGroup> groups = new Dictionary<int, ListViewGroup>(); 
groups.Add(1, new ListViewGroup("Group1")); 

ListViewGroup g = groups.Item (1);

ListViewGroup g = groups[1]; 

Da un pratico punto comprensione di vista (quello che sto per dire è solo per comprensione di base) il dizionario è essenzialmente a un array, ma invece di essere costretti ad usare numeri in ordine è possibile utilizzare qualsiasi numero che si come o anche una stringa.

new Dictionary<int, ListViewGroup> 

nel dizionario voi hanno

1 Group1 

gruppi [1] saranno recuperare Gruppo1.

Per capire veramente la freschezza del dizionario è quando si utilizza una chiave di stringa.

new Dictionary<string, ListViewGroup> 

in modo che se avete fatto queste cose

groups.Add("mykey1", new ListViewGroup("Group1")); 

gruppi [ "mykey1"] recupererà Gruppo1