2017-05-30 92 views
2

我有一个版本库public List<someView> list; 是不可能像这样得到一个linq项目,只是更新/替换整个对象,以便列表中的对象全局立即更新?列表中的C#更新对象

... 
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