这是我的员工类
public class Employee {
public String Name {get ;set ;}
public int ID {get ;set ;}
}
这是我的员工名单
Public List<Employee> lstEmployee ;
lstEmployee=new List<Employee>();
lstEmployee.Add(new Employee() { Name ="Abc", Id=1});
lstEmployee.Add(new Employee() { Name ="Xyz", Id=2});
lstEmployee.Add(new Employee() { Name ="Pqr", Id=3});
所以我可以使用此
查询员工Employee emp = lstEmployee. Where(emp=>emp.ID==1);
如果我打印emp.Name和emp.ID,我将分别获得Abc和1。
现在我改变了值
Emp.Name="Test"
将更新基于局部变量的值,但ID为1的lstEmployee中的Name值将保持不变。
有没有办法获取对象的引用,所以如果我们更改属性,那么它将更新列表。
如果这是无意义的,请原谅我。
我相信我可以通过在列表中直接应用它来实现这一点,可能就像lstEmployee. Where(emp=>emp.ID==1).Name="Test"
。
但在我目前的场景中,有一个函数从列表中返回Emp对象,我需要更新回来。所以我想考虑一下参考。提前致谢
答案 0 :(得分:2)
将更新基于局部变量的值,但ID为1的lstEmployee中的Name值将保持不变。
这不是真的。唯一的方法是将Employee定义为struct
,而不是class
。如果将Employee构建为类,则本地引用和列表引用都将引用相同对象,并且在更新本地引用时,还会更新列表中的对象。
此外,您的问题中的以下代码不应编译:
Employee emp = lstEmployee. Where(emp=>emp.ID==1);
.Where()
方法返回IEnumerable
,而不是单个对象。你需要更像这样的东西:
Employee emp = lstEmployee. Where(emp=>emp.ID==1).First();
答案 1 :(得分:1)
哪里不返回单个对象,而是返回集合。我不知道如何从Where(emp=>emp.ID==1).Name="Test"
访问Name属性。
我建议使用FirstOrDefault
代替Where
。
Employee emp = lstEmployee.FirstOrDefault(emp=>emp.ID==1);
答案 2 :(得分:1)
列表已经保留了参考资料。
Employee emp = lstEmployee.First(emp=>emp.ID==1);
这里emp指向同一个实例,指针位于列表中。
所以你说的是错的(ID为1的lstEmployee中的Name值将保持不变。) 它会被改变。