2017-05-30 8 views
2

私はpublic List<someView> list; のようなリポジトリを持っています。このようなlinqでアイテムを取得することはできません。リスト全体のオブジェクトがグローバルに更新されるようにオブジェクト全体を更新/置き換えてください。リスト内のオブジェクトを更新する

... 
var item = list.SingleOrDefault(m => m.Id== viewModel.Id); 
if (item != null) 
{ 
    item = viewModel; 
} 
... 
+1

あなたは、新しいオブジェクトに '** item'を**参照しない設定'item'が最初に参照したオブジェクトです。これは参照オブジェクトの仕組みです。リスト内のアイテムを置き換えたい場合は、それを削除して再追加する必要があります – Liam

+7

[リストアイテムを最良の方法で置き換える方法](https://stackoverflow.com/questions/17188966/how-to)の可能な複製-replace-list-item-in-best-way) – Liam

答えて

5

ませんitemは単なるローカル変数ですが、リストのインデクサーを使用することができますので:

int index = list.FindIndex(m => m.Id == viewModel.Id); 
if(index >= 0) 
    list[index] = viewModel; 
+0

ああ完璧です。それはうまくいった。ありがとうございます – stibay

+3

3年後の重複した質問でFGITWです。私はあなたが3年間眠らず、誰かがこの質問を捨てるのを待っていると確信しています! –

+0

実際にこれに関する以前の質問には似ていましたが、どこがとても複雑で多くの場合、単一のプロパティを更新するだけですか) – stibay

関連する問題