2013-06-04 13 views
5

Jestem nowy w C#/.net i mam problem ze Słownikiem klas. I stworzył słownika grup i dodaje element (lub więcej przedmiotów, teraz to nie ma znaczenia):Jak uzyskać dostęp do Słownika <TKey, TValue> .Item Właściwość w C#

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

Chciałbym, by znaleźć swoje grupy przez jej klucz. W dokumentacji mówi, że istnieje właściwość Item, do której mogę uzyskać dostęp bezpośrednio lub za pomocą indeksu. Jednak, gdy próbuję uzyskać do niego bezpośredni dostęp:

ListViewGroup g = groups.Item(1); 

Mój kompilator mówi, że nie ma definicji przedmiotu właściwości w klasie Dictionary. Czy ktoś może mi to wyjaśnić? Dziękuję.

+0

Pro-wskazówka: Po wpisaniu kropki '.' i intellisense pokazuje się; wszystkie metody, zmienne, właściwości, zdarzenia itp., do których możesz uzyskać dostęp, znajdą się na tej liście. To świetny sposób na znalezienie metody, której szukasz, nawet jeśli nie wiesz, jak się ją nazywa. – Nolonar

+0

@Nolonar: Nie zawsze prawdziwe: domyślnie opcje intellisense "ukrywają zaawansowanych członków", co oznacza, że ​​nie dostajesz wszystkiego. –

+0

@DanPuzey Widzę. Dzięki za oświecenie. – Nolonar

Odpowiedz

9

Item jest podziałowe, można go zweryfikować patrząc na definicję:

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

prostu użyć składni indeksatora dostęp do elementów o kluczowym:

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

Uwaga: ten rzuci KeyNotFoundException jeśli nie wpis z takim kluczem byłby obecny w słowniku groups. Na przykład groups[2] rzuci wyjątek w twoim przypadku.

3

Użyj groups[n].

Jeśli spojrzeć na the manual dla Dictionary<TKey, TValue>.Item, można znaleźć:

Ta właściwość umożliwia dostęp do określonego elementu w kolekcji za pomocą następującego C# składni: myCollection [key] .

lub szukaj w internecie "C# indeksujących":

Indexers Tutorial (C#):

definiowanie indeksowania pozwala na tworzenie klas, które działają jak "wirtualnych tablic." Dostęp do wystąpień tej klasy można uzyskać za pomocą operatora dostępu do macierzy pod numerem [].

W tym przypadku indeksatory lub Item nie są bezpośrednio dostępne.

+0

Masz na myśli groups.Item [n]? Ponieważ ma ten sam problem. – Wolf

+0

@Wolf nie, nie ma. To naprawdę pomaga, jeśli pokazujesz dokładny kod i dokładny błąd kompilacji w pytaniu. – CodeCaster

+3

Użycie 'Nazwa' jako nazwy słownika w odpowiedzi jest bardzo mylące. –

1

Otrzymujesz błąd, ponieważ nie ma właściwości o nazwie Item w klasie słownika na poziomie podstawowym.

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

ListViewGroup g = groups.Item (1);

ListViewGroup g = groups[1]; 

Z praktycznego punktu zrozumienia widzenia (co mam do powiedzenia tylko dla podstawowego zrozumienia) słownik jest zasadniczo tablicą ale zamiast być zmuszony do korzystania z numerów w celu można użyć dowolny numer jak lub nawet ciąg.

new Dictionary<int, ListViewGroup> 

W słownika masz

1 Group1 

grupy [1] będzie pobierać Grupa1.

Aby naprawdę zrozumieć chłód Słownika, należy użyć klawisza ciąg.

new Dictionary<string, ListViewGroup> 

tak, że jeśli to zrobił

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

grupy [ "mykey1"] odczyta Grupa1