我正在尝试删除绑定到转发器控件的Generic List
中的项目。
到目前为止,我有一个删除方法(在搜索互联网之后)应该有效:
Label lblMemberName = (Label)e.Item.FindControl("lblMemberName");
switch (e.CommandName)
{
case "RemoveMember":
foreach (challenge.Member member in Members.Where(member => member.Name == lblMemberName.Text))
{
//This line doesnt work
Members.Remove(member);
}
break;
}
不幸的是,这种情况的实际删除无效。
我了解您无法创建要删除的new
List<>
个实例。所以,这就是为什么我使用Linq
语句来查找之前的细节。
我做错了什么,怎么可能错呢?
答案 0 :(得分:3)
如上所述,您无法在迭代时修改集合的内容。
您也可以尝试List(T).RemoveAll()。请参阅LINQ: How to Use RemoveAll without using For loop with Array。这是一个比另一个列表更简洁的解决方案。
答案 1 :(得分:0)
修改您正在预测的列表是违法的。但是,您可以将其转换为for循环而不是foreach,然后对其进行修改。
for (int i=0; i < Members.Count; i++)
{
if (Members[i].Name == lblMemberName.Text)
Members.RemoveAt(i--); // decrement because we just shrunk the list)
}
答案 2 :(得分:0)
获取会员:
var member = Members.FirstOrDefault(i=>i.Name.Equals(thename));
然后将其从列表中删除:
if (member != null)
{
Members.Remove(member);
}