2017-05-30 3 views
2

Ich habe ein Repository mit einer public List<someView> list; Ist es nicht möglich, ein Objekt mit linq wie folgt zu erhalten und nur das gesamte Objekt zu aktualisieren/ersetzen, so dass das Objekt in der Liste global sofort aktualisiert wird? KeinC# Update-Objekt in Liste

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

Sie die Einstellung der ** Hinweis ** 'item' auf ein neues Objekt, nicht die Objekt, auf das "Objekt" ursprünglich Bezug genommen hat. So arbeiten Referenzobjekte. Wenn Sie das Element in der Liste ersetzen möchten, müssen Sie es entfernen und erneut hinzufügen. – Liam

+7

Mögliches Duplikat von [So ersetzen Sie Listenelemente auf die beste Weise] (https://stackoverflow.com/questions/17188966/how-to -replace-list-item-in-best-way) – Liam

Antwort

5

weil item ist nur eine lokale Variable, aber Sie können den Indexer der Liste verwenden:

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

Ah perfekt. Das hat funktioniert. Vielen Dank – stibay

+3

Sie sind also die FGITW über eine doppelte Frage 3 Jahre nach. Ich wette, du hast 3 Jahre lang nicht geschlafen und darauf gewartet, dass jemand diese Frage duldet! –

+0

Eigentlich sah ich schon bei früheren Fragen etwas ab, aber sie waren so kompliziert und viele von ihnen waren nur einzelne Eigenschaften zu aktualisieren;) – stibay