c # Как я могу определить словарь, который содержит различные типы? - PullRequest
10 голосов
/ 21 июня 2010

Если есть следующий код.Где вы видите XXX, я хотел бы поместить в массив типа long [].

Как я могу это сделать и как мне получить значения из словаря?Я просто использую defaultAmbience ["CountryId"] [0], чтобы получить первый элемент?

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", "" }
};

Ответы [ 3 ]

8 голосов
/ 21 июня 2010

First Off:

Если вы не знаете тип значения ИЛИ клавишу , не используйте универсальный словарь.

.NET Generics лучше всего подходят для тех случаев, когда вы знаете типы заранее..NET также предоставляет полный набор коллекций для использования, когда вы хотите хранить «смешанную сумку» объектов разных типов.

В этом случае эквивалентом словаря будет HashTable .

Проверьте пространство имен System.Collections (а не System.Collections.Generic), чтобы увидеть остальные имеющиеся у вас опции.

Если вы знаете тип ключа, то то, что вы делаете, является правильным способом.

Во-вторых:

Когда вы получаете значение ...Вы должны будете привести объект обратно к исходному типу:

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

или

// To get the first value
long id = ((long[])defaultAmbience["CountryId"])[0];
2 голосов
/ 21 июня 2010

Вы должны предоставить актерский состав там, где вы его называете.

((long[])defaultAmbience["countryID"])[0];
1 голос
/ 21 июня 2010

В этом случае C # на самом деле не знает, какой тип вы ожидаете получить, поэтому вам нужно привести его к правильному типу после того, как вы возьмете его из словаря и перед тем, как использовать его. В случае этого длинного массива это будет:

((long[])defaultAmbience["CountryId"])[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...