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;
}

c#改变变量对象也改变原来的

因为它们指向相同的对象列表的元素虽然你有一个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;
}