2010-06-21 14 views
10

Jeśli mają następujący kod. Gdzie widzisz XXX Chciałbym umieścić tablicę typu long [].C# Jak zdefiniować słownik zawierający różne typy?

Jak mogę to zrobić i jak pobrać wartości ze słownika? Czy po prostu używam defaultAmbience ["CountryId"] [0], aby uzyskać pierwszy element?

public static Dictionary<string, object> defaultAmbience = new Dictionary<string, object> 
{ 
    { "UserId", "99999" }, 
    { "CountryId", XXX }, 
    { "NameDefaultText", "nametext" }, 
    { "NameCulture", "it-IT" }, 
    { "NameText", "namelangtext" }, 
    { "DescriptionDefaultText", "desctext" }, 
    { "DescriptionCulture", "it-IT" }, 
    { "DescriptionText", "desclangtext" }, 
    { "CheckInUsed", "" } 
}; 
+7

Czy próbowałeś swojego kodu? –

+2

Może powinieneś użyć klasy lub struktury. – mbillard

+0

Czy masz do czynienia z danymi ldap lub ldif? – Jubal

Odpowiedz

8

pierwsze:

Jeśli nie znasz typ wartości lub klawisz, wówczas nie należy używać Generic Słownik.

. Generics są najlepiej przystosowane do tego, kiedy znasz typy z wyprzedzeniem. .NET zapewnia również cały zestaw kolekcji do użycia, gdy chcesz przechowywać "mieszaną torbę" obiektów różnych typów.

W takim przypadku odpowiednikiem Słownika będzie HashTable.

Sprawdź obszar nazw System.Collections (a nie System.Collections.Generic), aby zobaczyć pozostałe dostępne opcje.

Jeśli znasz typ klucza, to to, co robisz, jest właściwą drogą.

drugie:

Kiedy retreive wartość ... masz zamiar potrzebne do oddania obiektu z powrotem do pierwotnego typu:

long[] countryIds = (long[]) defaultAmbience["CountryId"]; 

lub

// To get the first value 
long id = ((long[])defaultAmbience["CountryId"])[0]; 
+6

Używanie typów nietypowych naprawdę nie pomoże w tym przypadku - nadal musi wykonywać obsadę itd. I on wie, że klucze będą ciągami, więc on faktycznie dostanie jakąś korzyść z używania ogólnych wersji. – Grzenio

+3

Co jest nie tak z 'Dictionary '? Dla mnie to pokazuje o wiele wyraźniej intencję przechowywania różnych przedmiotów. Poza tym powstrzymuje cię od użycia klucza niepodpisanego (zobacz także http://stackoverflow.com/questions/1433713/which-collection-class-to-use-hashtable-or-dictionary/1433736#1433736) –

+0

@ 0xA3 - Nic. Zaktualizowałem swoją odpowiedź. To, co teraz robi, jest w porządku, o ile zna typ klucza. –

2

Musisz podać obsadę tam, gdzie ją nazywasz.

((long[])defaultAmbience["countryID"])[0]; 
1

w tym przypadku C# nie wie, jakiego typu można oczekiwać, aby dostać, więc trzeba oddać do odpowiedniego typu po wyjęciu go ze słownika i przed użyciem. W przypadku tej długiej tablicy będzie to:

((long[])defaultAmbience["CountryId"])[0] 
Powiązane problemy