0

这是我的员工班

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 对象,我需要更新回来。所以我考虑获得参考。提前致谢

4

3 回答 3

2

基于局部变量的值将被更新,但 ID 为 1 的 lstEmployee 中 Name 的值将保持不变。

那不是真的。唯一正确的方法是如果 Employee 被定义为 a struct,而不是 a class。如果您将 Employee 构建为一个类,则本地引用和列表引用都将引用同一个对象,并且当您更新本地引用时,您也会更新列表中的对象。

此外,您问题中的以下代码不应编译:

Employee emp = lstEmployee. Where(emp=>emp.ID==1);

.Where()方法返回一个IEnumerable,而不是单个对象。你需要更多这样的东西:

Employee emp = lstEmployee. Where(emp=>emp.ID==1).First();
于 2013-10-09T14:18:23.627 回答
1

Where 不返回单个对象,而是一个集合。我不知道如何从Where(emp=>emp.ID==1).Name="Test".

我建议使用FirstOrDefault而不是Where.

Employee emp = lstEmployee.FirstOrDefault(emp=>emp.ID==1);
于 2013-10-09T14:17:38.393 回答
1

列表已经保留了引用。

Employee emp = lstEmployee.First(emp=>emp.ID==1);

这里 emp 用列表中的指针指向同一个实例。

所以你说的是错误的(ID为1的lstEmployee中Name的值将保持不变。)它将被改变。

于 2013-10-09T14:26:27.343 回答