c#改变变量对象也改变原来的
本文关键字:改变 原来 对象 变量 | 更新日期: 2023-09-27 18:02:58
根据我的理解,当你用new定义一个变量时,它会使用一个新的指针,所以它们是相互独立的。
然而,当我执行以下代码时,"apps"中的"Selected"属性也会变为true,当我只想让"cats"从原始的"apps"列表中重新初始化其值时。
我错过了什么吗?
List<Apps> apps = (from a in db.Categories
select new Apps
{
CategoryId = a.CategoryId,
CategoryName = a.CategoryName,
Selected = false
}).ToList();
foreach (var user in adminUserList)
{
List<Apps> cats = new List<Apps>(apps);
cats[0].Selected = true;
}
因为它们指向相同的对象列表的元素虽然你有一个list的浅拷贝但list的元素仍然指向相同的内存位置,你必须这样创建新对象:
List<Apps> cats = apps.Select(x=>new Apps
{
CategoryId = x.CategoryId,
CategoryName = x.CategoryName,
Selected = false
}).ToList();
现在迭代cat:
foreach (var user in adminUserList)
{
cats[0].Selected = true;
}