不同类型的列表列表

the*_*hal 8 c# generics list

我当前项目中的一个数据结构要求我存储各种类型的列表(String,int,float等).我需要能够动态存储任意数量的列表,而不知道它们将是什么类型.

我尝试将每个列表存储为一个object,但是我遇到了一些问题,试图转换回适当的类型(它将所有内容都识别为a List<String>).

例如:

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;
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么吗?有没有更好的方法来存储各种类型的列表列表,还是有更好的方法来确定某些东西是否是某种类型的列表?

Jar*_*Par 10

该类型List<T>继承自非泛型接口IList.由于myList类型中的所有值都是绑定的List<T>,因此可以将它们用作非泛型IList.因此,您可以使用它来大大简化您的逻辑

public int GetNumElements(int index) {
  object o = myLists[index];
  var l = o as IList;
  return l.Count;
}
Run Code Online (Sandbox Code Playgroud)

或者,因为您知道存储的所有值都myList将是绑定版本List<T>,IList而不是使用类型object.

List<IList> myLists = new List<IList>();
...
public int GetNumElements(int index) {
  return myList[index].Count;
}
Run Code Online (Sandbox Code Playgroud)