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

foreach(DirectoryInfodinsubDir){ToExcel[0]=d.Name;List<FileInfo>subList=GetFilesByDir... foreach (DirectoryInfo d in subDir)
{
ToExcel[0] = d.Name;
List<FileInfo> subList = GetFilesByDir(d.FullName);
foreach (FileInfo subFile in subList)
{
ToExcel[1] = subFile.FullName;

NewArray.Add(ToExcel);
Console.WriteLine(NewArray);//在这里断点看了下循环,每个数据均正常保存到了NewArray中
Console.WriteLine(ToExcel);
}
}
Console.WriteLine(NewArray);//这里NewArray所有数据突然变成了ToExcel的最后的那一个
return NewArray.ToArray();
展开
 我来答
showtime622
推荐于2018-04-05 · TA获得超过122个赞
知道小有建树答主
回答量:148
采纳率:0%
帮助的人:111万
展开全部
foreach(...)

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

NewArray.Add(ToExcel);
Console.WriteLine(NewArray);//在这里断点看了下循环,每个数据均正常保存到了NewArray中
Console.WriteLine(ToExcel);
}
百度网友15343da
2014-09-29 · TA获得超过637个赞
知道小有建树答主
回答量:613
采纳率:71%
帮助的人:211万
展开全部
你这个逻辑有问题的。
对于ToExcel[1] 这个对象而言, 你每次都在foreach的循环里, 都进行赋值操作ToExcel[1] = subFile.FullName; 然后添加到list中,因为 ToExcel[1] 是引用类型的, 你每次赋值的时候所有对ToExcel[1]的引用都会进行改变的, 也就是你Add的所有ToExcel[1]都会变成ToExcel[1] 的最新值,
正确的做法就是同楼上所说,用 NewArray.Add(subFile.FullName) ,不要引用ToExcel[1];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清水栞
2014-09-29 · TA获得超过1547个赞
知道小有建树答主
回答量:1538
采纳率:50%
帮助的人:985万
展开全部
NewArray.Add(subFile.FullName) 就行了
追问
ToExcel中保存的是subFile的上层文件夹和subFile.FullName
追答
这么说吧ToExcel是一个对象的指针,它在内存中间只有一个区域,只有一份。
你每次都Add这个ToExcel,相当于是把一堆快捷方式的图标放在一个文件夹里,它们都指向同一个文件,这个文件变了,所有的快捷方式全变了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式