我正在寻找一种解决方案,可以创建不同数据类型的List<>
列表,例如
List<List<int>,List<double>,List<string>> list;
或者一个包含多个数据类型的List<>
,例如
List<int,double,string> list;
我正在寻找一种解决方案,可以创建不同数据类型的List<>
列表,例如
List<List<int>,List<double>,List<string>> list;
或者一个包含多个数据类型的List<>
,例如
List<int,double,string> list;
说真的...为什么?
使用这些结构的代码将会令人困惑且难以支持。它确实会变得非常困难。
如果您的数据有自定义结构,请创建一个自定义对象来表示该结构,就像这样:
class MyThing
{
public int Widget { get; set; }
public double Foo { get; set; }
public string Something { get; set; }
}
当然,对于您的值、类型等,请使用实际有意义的名称,因为这就是这样做的整个重点。
然后只需列出这些名称的列表:
var things = new List<MyThing>();
随着您的结构不断变化和成长,您将该结构的逻辑 嵌入对象本身,而不是嵌入使用它的所有消费代码中。然后使用它的代码更接近于试图执行的操作的语义,而不是令人眼花缭乱的语法操作的各种组合。 public class Helper
{
public object value;
private string Type;
}
List<Helper> myList=new List<Helper>();
myList.Add(new Helper {value = 45,Type = "int"});
myList.Add(new Helper {value = 45,Type = "int"});
myList.Add(new Helper {value = "hello",Type = "string"});
根据Type的不同,进行相应的隐式转换。
您可以通过以下方式创建列表:
List<List<int>>
想要有包含多种数据类型的列表,您可以使用Tuple,它最多可以接受8个项目。
List<Tuple<string, int>>
List<Tuple<string, string, int>>
Tuple<List<int>, int, int> tuple = new Tuple<List<int>, int, int>(new List<int>(), 2, 3);
public class MyInfo {
public int MyInt32 { get; set; }
public double MyDouble { get; set; }
public string MyString { get; set; }
}
var myList = new List<MyInfo>()
。List<Tuple<int, double, string>>
,但如果使用范围超过单个类,则建议创建自己的类,因为Tuples
属性对它们所代表的内容不够描述性: Item1
,Item2
,Item3
...解决这个问题的最佳方式是使用接口,你可以在这里找到解决方案多个数据类型列表
int
、double
和string
之间没有共享接口。 - Alexei Levenkov
List<int,double,string> list;
,那么list[0]
的编译时类型会是什么呢?你需要一个共同的基础类型,即在这种情况下是object
。 - D Stanley