列表<>具有多个列表 c#

本文关键字:列表 | 更新日期: 2023-09-27 18:33:11

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

或具有多种数据类型的List<>,例如 List<int,double,string> list;

列表<>具有多个列表 c#

严肃地说...为什么?

使用这些结构的代码将令人困惑且难以支持。 真的,真的会。

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

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

和隐蔽根据类型

您可以通过以下方式列出列表

List<List<int>>

要拥有一个包含多种数据类型的列表,您可以使用最多可以接受 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属性对它们是什么不是很描述:Item1Item2Item3......

解决此问题的最佳方法是使用界面,您可以在此处找到解决方案的多种数据类型列表

您可以使用 ArrayList - 旧的非泛型列表。这允许您在其中放置任何东西,int,string,FooObject,bool,....