C# 要使用哪种对象集合类型?

C# 要使用哪种对象集合类型?,c#,arrays,list,collections,C#,Arrays,List,Collections,现在,我有一个2d字符串数组保存我的数据: //...find number of rows needed... string[,] data = new string[totalRows, 12]; //row / column 它起作用了。但是现在我想给我的程序添加更多的功能,这不再对我有利,因为连接2d数组虽然可行,但会带来其他问题:直到现在,我在一个类变量中存储行数,因为我不需要同时维护两行。可以说,我知道列总是一样的,我可以将长度除以它得到行,然后编写一个方法来组合它们 我觉得还有更

现在,我有一个2d字符串数组保存我的数据:

//...find number of rows needed...
string[,] data = new string[totalRows, 12]; //row / column
它起作用了。但是现在我想给我的程序添加更多的功能,这不再对我有利,因为连接2d数组虽然可行,但会带来其他问题:直到现在,我在一个类变量中存储行数,因为我不需要同时维护两行。可以说,我知道列总是一样的,我可以将长度除以它得到行,然后编写一个方法来组合它们

我觉得还有更好的办法。我对“较新”的东西缺乏了解,但我相信其中一个比其他的更符合要求。因此,在我跳入并创建
List data=newlist()之前
或其他看起来同样奇怪的东西,我希望别人的意见更有经验

我不需要任何排序、删除、插入等功能。我只需要它来保存数据;现在,我需要能够相对容易地转到
data+=data2
——总之是这样的<代码>数据。长度(仅给出外部长度)也非常有用

最好的办法是什么

如果您想了解更多信息,请告诉我。谢谢

基于答案的更多信息:

数据基本上是电子表格格式。即

[['1234-56789-12345', 'screwdriver', '', 'ea', '1', '', '', '', '', '', '', ''],
[['1234-56789-54321', 'wrench', '', 'ea', '1', '2', '3', '', '', '', '', '']]
我不想搞清楚这些信息在描述什么——我不在乎。我需要相对于其他事物的位置

更多信息:

用法是作为一个xml文件和另一个xml文件之间的容器。刚刚意识到那些xlst的东西可能是我最初问题的另一个解决方案,但是呃。也许在下辈子。(一切正常..就像我说的,添加功能。如果它正常,为什么要破坏它?

为什么不使用


示例。

我认为一个值得问的问题是,您的数据列是否可以用一个对象更好地表示,该对象可以解释每列所包含的内容。例如,代替

row 1 => { "Jane", "Smith", "1 Rocket Ave", "Houston", "TX" }
你有

new Person { FirstName = "Jane", LastName = "Smith", /* etc. */ }
因此,您的2D数组将成为这些新的
Person
对象的一维集合,这些对象更容易在代码中进行推理

List<Person> people = ...
// vs.
string[,] people = ...
列出人员=。。。
//vs。
字符串[,]人=。。。
字典

字典

字典
等等

这将取决于您想要使用的键的类型(字符串表示名称,int表示id,等等)


如果您不需要通过某种键进行查找,那么
列表没有什么问题

这取决于“12”的难度或灵活性

我认为
列表
是一种灵活的方法

List
将修复它(空列可能更容易),同时在行数方面仍然灵活。像锯齿状阵列一样,您需要使用for循环对其进行设置:

List<string[]> data = new List<string[]>();

for (int i = 0; i < desiredRows; i++)
   data.Add(new string[12]);

data[1][1] = "Screwdriver";
列表数据=新列表();
for(int i=0;i
列表
可以正常工作。你能想到你想做的任何操作,如果使用它,都不会很简单吗?你如何在其中搜索(查找)?我不能说我可以,但我对它们不太熟悉。只是好奇还有什么。@Henk我不明白你的问题?emragin,这里的选择主要取决于使用场景。你没怎么表现出来。再加上几个例子,我以前想过字典。我根本不需要键值功能。我也需要维持订单。那好吧。如果您需要比OrderBy更多地控制订单,那么最好使用其他工具:)来回答您的问题:不,我需要维护订单。有些值甚至可能是空的,但我仍然需要它们。创建一个结构来保存我的行数据的想法会增加更大的问题。也就是说,我可以理解你为什么要提出它——我没有说得很清楚。我想得越多,我通常喜欢的面向对象的数据处理方法就越不正确。基本上就是拿一个电子表格。我想这可能就是我想要的。
Dictionary<int,List<string>>
Dictionary<int,string[]>
List<string[]> data = new List<string[]>();

for (int i = 0; i < desiredRows; i++)
   data.Add(new string[12]);

data[1][1] = "Screwdriver";