假设你有一个List l_mur = new List();
然后填写清单。
然后根据您要删除某些值的条件而不重新查询......
l_mur.RemoveAt(l_mur.FindIndex(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid)));
但是,我在这里使用的代码似乎不起作用。它告诉我索引超出范围,但如果我只是在寻找真正存在的东西,它怎么能超出范围。
答案 0 :(得分:3)
List<T>.FindIndex()
如果找不到匹配项,则返回-1 - 超出List<T>.RemoveAt()
的范围。
另请注意,FindIndex()
仅根据您的谓词返回第一个出现次数的索引 - 如果有多个匹配项,您只能删除其中的第一个匹配项用你当前的方法。
基于谓词进行删除的更好方法是RemoveAll()
:
l_mur.RemoveAll(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid));
答案 1 :(得分:1)
最好将列表过滤到列表的新实例:
var l_mur = l_mur.Where(f => (f.xid != tmur.xid || f.sid != tmur.sid || f.mid != tmur.mid || f.bid != tmur.bid));
答案 2 :(得分:0)
使用此代码:
l_mur.Remove(l_mur.Find(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid)));