从IEnumerable <T>中删除项目不起作用

Val*_*bha 0 c# asp.net-mvc ienumerable list

我试图从中删除对象 IEnumerable<ImportDataMappingModel> GridList

我尝试了以下选项,但没有它们正在工作.

value 是一处房产 ImportDataMappingModel

GridList.ToList().RemoveAll(o => o.value==null);
GridList=GridList.TakeWhile(o => o.value!=null);
Run Code Online (Sandbox Code Playgroud)

pho*_*oog 6

试试这个:

GridList = GridList.Where(o => o.value != null).ToList();
Run Code Online (Sandbox Code Playgroud)

您的第一次尝试,GridList.ToList().RemoveAll(o => o.value==null)创建列表的副本(ToList()调用),然后修改该副本,保持原始列表不变.

第二次尝试GridList=GridList.TakeWhile(o => o.value!=null)创建一个枚举,枚举时将返回第一个空项(如果有)之前的所有非空项.但它实际上并没有枚举新的可枚举,所以你永远不会真正创建新的集合.

要纠正第二次尝试,您需要做两件事:

  1. 将TakeWhile替换为Where.例如,如果您有一个包含三个条目的列表,其中第一个和第三个不为null,而第二个为null,则TakeWhile将仅返回第一个项目.如果您想要所有非空项,则需要使用Where.

  2. 调用ToList()将Where枚举器选择的项目复制到新列表中.