.NET - 从ListOfObject获取对象的引用

时间:2013-10-09 14:10:43

标签: c# .net ienumerable

这是我的员工类

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

3 个答案:

答案 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值将保持不变。) 它会被改变。