我当前项目中的一个数据结构要求我存储各种类型的列表(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)