带字符串数组的列表(List <string []>)</string []>

时间:2013-06-18 10:59:06

标签: c# arrays string list

我有一些奇怪的问题,我的所有字符串数组在List中具有相同的值。 这是我的代码:

List<string[]> map_data = new List<string[]>();
string[] map_data_array = new string[11];

for(int i = 0; i < 2000; i++)
{
    map_data_array = PopulateDataFromFile(); // it returns different data every call
    map_data.Add(map_data_array); // store to List
}

map_data_array总是有不同的数据,我已经通过将断点放在那里并且我已经检查过来验证了它。

问题是map_data所有元素的值都相同。当i为1999时,此值是来自函数PopulateDataFromFile的数据。

我做错了什么? :/

4 个答案:

答案 0 :(得分:10)

仅当您将相同的数组放入列表时才会发生这种情况。由于您没有将代码提供给PopulateDataFromFile,我们只能猜测会发生什么。确保该函数返回每次使用new创建的单独数组。

答案 1 :(得分:2)

您需要以块为单位处理数据,因为PopulateDataFromFile();看起来要一次性返回所有数据(或者数组可以容纳的数据)。使用扩展方法,您可以执行以下操作: -

List<string[]> map_data = new List<string[]>();
foreach (var batch in PopulateDataFromFile().Batch(11))
{
       map_data.Add((batch.ToArray());
}

扩展方法: -

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> items, int batchSize)
{
     return items.Select((item, inx) => new { item, inx })
                 .GroupBy(x => x.inx / batchSize)
                 .Select(g => g.Select(x => x.item));
}

答案 2 :(得分:0)

PopulateDataFromFile()返回一个具有相同值的String数组。

答案 3 :(得分:-5)

在循环中每次只更改map_data_array的地址,这就是为什么总是将值更改为从方法调用获得的较新数据。每次重新初始化字符串数组都会有所帮助。它应该看起来像这样

    for(int i = 0; i < 2000; i++)
    {
         string[] map_data_array = PopulateDataFromFile(); // it returns different data every call
         map_data.Add(map_data_array); // store to List
    } 

或者如果它让你感到困惑,你可以通过

来简化
    for(int i = 0; i < 2000; i++)
    {             
         map_data.Add(PopulateDataFromFile()); // store to List
    }