![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
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(); 展开
{
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(); 展开
3个回答
展开全部
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);
}
{
//这个地方,每次都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);
}
展开全部
你这个逻辑有问题的。
对于ToExcel[1] 这个对象而言, 你每次都在foreach的循环里, 都进行赋值操作ToExcel[1] = subFile.FullName; 然后添加到list中,因为 ToExcel[1] 是引用类型的, 你每次赋值的时候所有对ToExcel[1]的引用都会进行改变的, 也就是你Add的所有ToExcel[1]都会变成ToExcel[1] 的最新值,
正确的做法就是同楼上所说,用 NewArray.Add(subFile.FullName) ,不要引用ToExcel[1];
对于ToExcel[1] 这个对象而言, 你每次都在foreach的循环里, 都进行赋值操作ToExcel[1] = subFile.FullName; 然后添加到list中,因为 ToExcel[1] 是引用类型的, 你每次赋值的时候所有对ToExcel[1]的引用都会进行改变的, 也就是你Add的所有ToExcel[1]都会变成ToExcel[1] 的最新值,
正确的做法就是同楼上所说,用 NewArray.Add(subFile.FullName) ,不要引用ToExcel[1];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
NewArray.Add(subFile.FullName) 就行了
追问
ToExcel中保存的是subFile的上层文件夹和subFile.FullName
追答
这么说吧ToExcel是一个对象的指针,它在内存中间只有一个区域,只有一份。
你每次都Add这个ToExcel,相当于是把一堆快捷方式的图标放在一个文件夹里,它们都指向同一个文件,这个文件变了,所有的快捷方式全变了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询