С# Как я могу определить словарь, который содержит разные типы?

Если у вас есть следующий код. Где вы видите 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", "" }
};

Ответ 1

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

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

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

Ответ 3

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

((long[])defaultAmbience["CountryId"])[0]