在我的代码中,我确实有一个名为lstDetails
的List
它包含另一个列表,名为lstcheckdetails
作为输出,lstcheckdetails
在调用Clear
函数时返回一个空列表
直到现在,我还以为在向列表添加数据后,列表会被提交。
你能帮我吗?
List<AttendanceDetails> lstDetails = new List<AttendanceDetails>();
List<CheckDetails> lstcheckdetails = new List<CheckDetails>();
CheckDetails checkdetails = new CheckDetails();
for loop
{
if(condition)
{
checkdetails.Item1 = item1;
checkdetails.Item2 = item2;
lstcheckdetails.Add(checkdetails);
}
else
{
lstDetails.Add(new AttendanceDetails { TimeCard = lstcheckdetails });
lstcheckdetails.Clear();
}
}
我建议阅读参考类型在C#中的工作原理。Jon Skeet一如既往,是一个值得倾听的好人。参考文献和价值观-然而,有很多关于这方面的来源
为了快速汇总引用,引用类型(顾名思义(是通过引用传递的,因此,除非您显式地复制该对象(在本例中使用.ToList()
创建一个新列表(,否则新对象和循环都指向内存中的同一对象,这就是为什么称为.Clear()
会清空您正在查看的两个位置的列表。
对你来说,一段快速修复的代码是。。。{ TimeCard = lscheckdetails.ToList()
。。。这将创建列表的新副本,并允许您清除循环中的副本。