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 がstructではなくとして定義されている場合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 は単一のオブジェクトではなく、コレクションを返します。から Name プロパティにアクセスする方法がわかりませんWhere(emp=>emp.ID==1).Name="Test"

FirstOrDefaultの代わりに使用することをお勧めしますWhere

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