One of the data structures in my current project requires that I store lists of various types (String, int, float, etc.). I need to be able to dynamically store any number of lists without knowing what types they’ll be.
I tried storing each list as an object, but I ran into problems trying to cast back into the appropriate type (it kept recognizing everything as a List<String>).
For example:
List<object> myLists = new List<object>();
public static void Main(string args[])
{
// Create some lists...
// Populate the lists...
// Add the lists to myLists...
for (int i = 0; i < myLists.Count; i++)
{
Console.WriteLine("{0} elements in list {1}", GetNumElements(i), i);
}
}
public int GetNumElements(int index)
{
object o = myLists[index];
if (o is List<int>)
return (o as List<int>).Count;
if (o is List<String>) // <-- Always true!?
return (o as List<String>).Count; // <-- Returning 0 for non-String Lists
return -1;
}
Am I doing something incorrectly? Is there a better way to store a list of lists of various types, or is there a better way to determine if something is a list of a certain type?
The type
List<T>inherits from the non-generic interfaceIList. Since all of the values in themyListtype are bound intsance ofList<T>you can use them as the non-genericIList. So you can use that to greatly simplify your logicOr alternatively since you know that all of the values stored in
myListwill be a bound version ofList<T>, useIListas the type instead ofobject.