C#中带有多个列表的List<>

4

我正在寻找一种解决方案,可以创建不同数据类型的List<>列表,例如 List<List<int>,List<double>,List<string>> list;

或者一个包含多个数据类型的List<>,例如 List<int,double,string> list;


1
创建 List<iEnumerable>。 - Seb
5
实际上想要做什么? - cbr
假设你可以这样写代码:List<int,double,string> list;,那么list[0]的编译时类型会是什么呢?你需要一个共同的基础类型,即在这种情况下是object - D Stanley
2
似乎有更好的方法来解决你的问题。你应该准确地描述你想要完成什么。 - ic3man7019
我正在开发一个用于填补数据缺失的软件,它可以填补分类和数值类型的数据。因此,我考虑使用同一列表来存储不同的数据类型,这样我就不必一遍又一遍地解析值了。@cubrr - Usama Mohsin
6个回答

10

说真的...为什么?

使用这些结构的代码将会令人困惑且难以支持。它确实会变得非常困难。

如果您的数据有自定义结构,请创建一个自定义对象来表示该结构,就像这样:

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

当然,对于您的值、类型等,请使用实际有意义的名称,因为这就是这样做的整个重点。

然后只需列出这些名称的列表:

var things = new List<MyThing>();
随着您的结构不断变化和成长,您将该结构的逻辑 嵌入对象本身,而不是嵌入使用它的所有消费代码中。然后使用它的代码更接近于试图执行的操作的语义,而不是令人眼花缭乱的语法操作的各种组合。

7
也许你可以这样做。
 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的不同,进行相应的隐式转换。


5

您可以通过以下方式创建列表:

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

1
如果我理解得正确,我认为你需要一个小帮手类:
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...

1

1
虽然这是一个好的建议(最好是重复的建议/评论,而不是答案),但对于OP来说并没有帮助,因为在intdoublestring之间没有共享接口。 - Alexei Levenkov

1
您可以使用ArrayList - 旧的非泛型列表。这允许您将任何内容放入其中,如int,string,FooObject,bool等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接