Matthew Finlay Matthew Finlay - 2 months ago 8x
C# Question

Dictionary of generic lists or varying types

I want to have a Dictionary that maps strings to generic lists of varying types. i.e. in the following form:

Key Value
string List<T>
string List<U>
string List<V>
string List<U>

Currently I'm using a
Dictionary<string, IList>
and then extracted the strongly typed list from each dictionary
KeyValuePair<string, IList> pair
entry as follows:

Type layerType = pair.Value.GetType().GetGenericArguments()[0];
List<layerType> objectsClicked = pair.Value as List<layerType>;

Is there a nicer way to do this?

As has been noted, the above doesn't compile, apologies - that's what you get when you ask a question while you're still working on somethings.
Some more explanation. I'm making a basic spatial data viewer. The final view consists of a group of
s. Each layer provides a delegate to render its type (given an offset and scale) and a way to check which of its objects are in the current window. For hit testing, I would like a List for each Layer of which objects have been hit. That list would be a
for a
layer, etc... The grouping of the hits from all the
s would then be a collection of strongly typed lists.


How about Dictionary<string, dynamic> assuming you're on C# 4

Dictionary<string, dynamic> Dict = new Dictionary<string, dynamic>();
Dict.Add("int", new List<int>());
Dict.Add("string", new List<string>());


foreach (KeyValuePair<string, dynamic> pair in Dict) {
   Type T = pair.Value.GetType();

That prints out



Is that what you're looking for?