2016-02-04 119 views
2

我正在寻找一个解决方案来创建具有不同数据类型的列表List<>List<List<int>,List<double>,List<string>> list;列表<>与多个列表C#

或多种类型的数据一个List<>List<int,double,string> list;

+1

创建列表 Seb

+5

你究竟在做什么**试图做什么? – cubrr

+0

假设你可以做'List list;'list [0]'的编译时类型是什么?你需要一个通用的基础类型=在这种情况下,'对象'。 –

回答

3

可能是你可以根据类型做这样

public class Helper 
    { 
     public object value; 
     private string Type; 
    } 

然后创建列表这样

myList.Add(new Helper {value = 45,Type = "int"}); 
myList.Add(new Helper {value = 45,Type = "int"}); 
myList.Add(new Helper {value = "hello",Type = "string"}); 

和隐蔽

List<Helper> myList=new List<Helper>(); 

使用。

4

,您可以拨打通过

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); 
+0

谢谢@Swen –

0

如果我正确认识你,我想你需要一点辅助类:

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性能不是很描述为它们是什么:Item1Item2Item3 ...

5

千真万确... 为什么?

消耗这些结构的代码将会令人困惑并且难以支持。它真的,真的会。

如果您的数据具有自定义结构,请创建一个自定义对象来表示该结构。事情是这样的:

class MyThing 
{ 
    public int Widget { get; set; } 
    public double Foo { get; set; } 
    public string Something { get; set; } 
} 

使用您的值/类型/等实际有意义的名字。当然,因为这就是完成这一点的全部要点。

然后,只需有这些列表:

var things = new List<MyThing>(); 

当你的结构的不断变化和成长,你建立一个结构的逻辑放到对象本身,而不是把所有的消费代码它使用它。然后使用它的代码更接近它所要执行的操作的语义,而不是令人眼花缭乱的语法操作。要解决这个

+0

谢谢@David –

1

最好的办法是使用界面,你可以在这里找到list of multiple data types

+1

虽然这是好的建议(最好是重复的建议/评论,而不是回答顺便说一句),但它对OP没有帮助,因为'int'之间没有共享接口,'double'和'string'。 –

1

解决方案可以使用ArrayList - 旧的非泛型列表。这允许你放入任何东西,int,string,FooObject,bool,....