0

我正在尝试从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的 a 实例。List<>所以,这就是为什么我使用该Linq语句来查找以前的详细信息。

我做错了什么,怎么可能修复它?

4

3 回答 3

3

如上所述,您不能在迭代集合时修改集合的内容。

您也可以尝试List(T).RemoveAll()。请参阅LINQ:如何在不使用 For 循环和 Array 的情况下使用 RemoveAll。这是一个比另一个列表更简洁的解决方案。

于 2012-11-01T08:48:24.020 回答
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)
}
于 2012-11-01T08:50:17.400 回答
0

获取会员:

var member = Members.FirstOrDefault(i=>i.Name.Equals(thename));

然后将其从列表中删除:

if (member != null) 
{ 
    Members.Remove(member); 
}
于 2012-11-01T09:22:01.727 回答