在扩展方法中更改 List<T> 的状态
Change state of List<T> inside extension method
如何在扩展方法中更改作为视图模型一部分的列表的状态,以便视图模型反映此更改而无需重新分配值
代码:
//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; }
}
分配参数对传递给方法的表达式没有影响。
您反而想改变现有实例。为此,您需要接受一个可变类型;即 List<T>
.
List<T>
已经有一个 RemoveAll()
函数可以做到这一点,因此您根本不需要做任何事情。
如何在扩展方法中更改作为视图模型一部分的列表的状态,以便视图模型反映此更改而无需重新分配值
代码:
//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; }
}
分配参数对传递给方法的表达式没有影响。
您反而想改变现有实例。为此,您需要接受一个可变类型;即 List<T>
.
List<T>
已经有一个 RemoveAll()
函数可以做到这一点,因此您根本不需要做任何事情。