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 interface IList
. Since all of the values in the myList
type are bound intsance of List<T>
you can use them as the non-generic IList
. So you can use that to greatly simplify your logic
public int GetNumElements(int index) {
object o = myLists[index];
var l = o as IList;
return l.Count;
}
Or alternatively since you know that all of the values stored in myList
will be a bound version of List<T>
, use IList
as the type instead of object
.
List<IList> myLists = new List<IList>();
...
public int GetNumElements(int index) {
return myList[index].Count;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With