Изменить состояние List<T> внутри метода расширения
Как изменить состояние List, являющегося частью модели представления в методе расширения, чтобы модель представления отражала это изменение без необходимости повторного присвоения значения
Код:
//ViewModel:
//This line should modify the change internally wihtout having to reassign like
// ..Selected =model.CheckBoxList.Selected.RemoveWhere(c => c.SelectedValue == null)
model.CheckBoxList.Selected.RemoveWhere(c => c.SelectedValue == null)
Метод продления:
public static IEnumerable<T> RemoveWhere<T>(this IEnumerable<T> source, Predicate<T> predicate)
{
var x = source.ToList();
x.RemoveAt(1);
source = x;
return source;
}
Обновить:
public class CheckBoxList
{
public CheckBoxList()
{
//Selected = new List<CheckBoxListViewModel>();
}
[XmlElement("SelectedItem")]
public List<CheckBoxListViewModel> Selected { get; set; }
}
[XmlRoot(ElementName = "MyClass")]
public class CheckBoxListViewModel
{
public string SelectedValue { get; set; }
public string SelectedDescription { get; set; }
}
1 ответ
Решение
Назначение параметра не влияет на выражение, которое вы передаете методу.
Вместо этого вы хотите изменить существующий экземпляр. Для этого вам нужно принять изменяемый тип; а именно, List<T>
,
List<T>
уже есть RemoveAll()
функция, которая делает именно это, так что вам не нужно ничего делать вообще.