Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c# How can I define a dictionary that holds different types?

If have the following code. Where you see the XXX I would like to put in an array of type long[].

How can I do this and how would I fetch values from the dictionary? Do I just use defaultAmbience["CountryId"][0] to get the first 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", "" }
};
like image 285
Martin Avatar asked Jun 21 '10 15:06

Martin


1 Answers

First Off:

If you don't know the type of the value OR the key, then don't use the Generic Dictionary.

.NET Generics are best suited for when you know the types ahead of time. .NET also provides an entire set of collections for use when you want to store a "mixed bag" of objects of different types.

In this case, the equivalent of the Dictionary would be the HashTable.

Check out the System.Collections (rather than System.Collections.Generic) namespace to see the rest of the options you have.

If you know the type of the key, then what you're doing is the right way.

Secondly:

When you retreive the value...you're going to need to cast the object back out to its original type:

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

or

// To get the first value
long id = ((long[])defaultAmbience["CountryId"])[0];
like image 119
Justin Niessner Avatar answered Sep 22 '22 06:09

Justin Niessner