2013-06-29 3 views
0

я не могу изменить общий список с:изменять элементы в общем списке

var x = (PaypalResponse)Session["PaypalResponse"]; // x.Response is my List 

x.Response.ToList().Where(i => i.Id== 1).ForEach(s => s.Selected = true); 

, где я делаю неправильно? Спасибо.

+4

Если 'x' список, чем почему вы звоните' x.Response', после того, почему вы '.toList'ing это? Это делает новый список. –

+0

Какой тип элемента здесь? Если это ссылочный тип, я бы ожидал, что это сработает, хотя я бы лично не использовал 'ForEach', как это. –

+0

var x = (PaypalResponse) Сессия ["PaypalResponse"]; x.Response // Response is my List –

ответ

1

Вы можете сделать это:

x.Response.Where(i => i.Id == 1).ToList().ForEach(s => s.Selected = true); 

Однако, это немного трата ресурсов, чтобы построить новый список только для этой одной строки кода. Я бы рекомендовал вместо этого:

foreach(var s in x.Response.Where(i => i.Id == 1)) 
{ 
    s.Selected = true; 
} 

Если вы хотите обновить более одного элемента, вы можете сделать это вместо того, чтобы:

var s = x.Response.FirstOrDefault(i => i.Id == 1); 
if (s != null) 
{ 
    s.Selected = true; 
} 

И, конечно, если вы знаете будет один пункт для обновления, это еще проще:

x.Response.First(i => i.Id == 1).Selected = true;