c# 数组循环保存到list中,读取list时所有数据均变成了最后的一个数组信息

2025-06-26 09:49:18
推荐回答(3个)
回答1:

foreach(...)

{
//这个地方,每次都new下ToExcel,因为我觉得你始终在覆盖同一个地方,换句话 说ToExcel这个对象指向的地方是一个地方,你每次没有释放 这个对象就继续还在原来的地方附值,会有问题
ToExcel[0] = d.Name;
List subList = GetFilesByDir(d.FullName);
foreach (FileInfo subFile in subList)
{
ToExcel[1] = subFile.FullName;

NewArray.Add(ToExcel);
Console.WriteLine(NewArray);//在这里断点看了下循环,每个数据均正常保存到了NewArray中
Console.WriteLine(ToExcel);
}

回答2:

你这个逻辑有问题的。
对于ToExcel[1] 这个对象而言, 你每次都在foreach的循环里, 都进行赋值操作ToExcel[1] = subFile.FullName; 然后添加到list中,因为 ToExcel[1] 是引用类型的, 你每次赋值的时候所有对ToExcel[1]的引用都会进行改变的, 也就是你Add的所有ToExcel[1]都会变成ToExcel[1] 的最新值,
正确的做法就是同楼上所说,用 NewArray.Add(subFile.FullName) ,不要引用ToExcel[1];

回答3:

NewArray.Add(subFile.FullName) 就行了