我有一些奇怪的问题,我的所有字符串数组在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
的数据。
我做错了什么? :/
答案 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
}