【问题标题】:Remove item from List Collection not removing从列表集合中删除项目不删除
【发布时间】:2013-01-17 13:26:24
【问题描述】:

我正在制作一个系列。我需要从集合中删除一项并使用过滤/删除的集合。

这是我的代码

public class Emp{
  public int Id{get;set;}
  public string Name{get;set;}
}

List<Emp> empList=new List<Emp>();
Emp emp1=new Emp{Id=1, Name="Murali";}
Emp emp2=new Emp{Id=2, Name="Jon";}
empList.Add(emp1);
empList.Add(emp2);

//Now i want to remove emp2 from collection and bind it to grid.
var item=empList.Find(l => l.Id== 2);
empList.Remove(item);

问题是即使删除了我的收藏品后仍显示计数 2。
可能是什么问题?

编辑:

原始代码

  var Subset = otherEmpList.FindAll(r => r.Name=="Murali");

   if (Subset != null && Subset.Count > 0)
   {
    foreach (Empl remidateItem in Subset )
    {
       Emp removeItem = orginalEmpList.Find(l => l.Id== 
                                          remidateItem.Id);
                    if (removeItem != null)
                    {
                        orginalEmpList.Remove(remidateItem); // issue here

                    }
      }
    }

它工作正常。在实际代码中,我正在删除 remediateItem。补救项是 相同的类型,但属于不同的集合。

【问题讨论】:

  • 你能告诉我们你的实际代码吗?事实上,这不会编译。您提供的内容(修复后)有效。
  • 您的问题是从集合中删除项目还是更新用户界面?也许该项目已成功从集合中删除,但 UI 未更新。
  • 是的。当我运行代码时,它似乎可以工作,当您修复编译错误时。
  • 我需要根据其他集合过滤许多。现在使用循环。更新的代码。有没有其他办法?
  • @Murali 我没有理由删除这个问题。此问题有答案,请将其中一个答案标记为正确答案,或添加您自己的答案。

标签: c# asp.net list collections


【解决方案1】:

你需要在这个方法中添加Remove():

orginalEmpList.SaveChanges();

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • 问题是关于如何从通用列表中删除元素。这与 EF 和将记录保存到数据库无关。
【解决方案2】:

您粘贴的这段原始代码完美运行。它相应地删除项目。

List<Emp> empList = new List<Emp>();
Emp emp1 = new Emp { Id = 1, Name = "Murali" };
Emp emp2 = new Emp { Id = 2, Name = "Jon" };
empList.Add(emp1);
empList.Add(emp2);

//Now i want to remove emp2 from collection and bind it to grid.
var item = empList.Find(l => l.Id == 2);
empList.Remove(item);

【讨论】:

    【解决方案3】:

    您将对象传递给Remove,这些对象不在您要删除的列表中,而是在其他列表中的对象副本,这就是为什么它们没有被删除,使用List.RemoveAll方法传递谓词。

    lst.RemoveAll(l => l.Id== 2);
    

    如果你想删除一些其他集合中的许多 id,比如 id 数组

    int []ids = new int[3] {1,3,7};
    lst.RemoveAll(l => ids.Contains(l.Id))
    

    【讨论】:

    • 这不是会从列表中删除所有但他只想删除一个
    • 我已经给出了里面的条件,它只会删除满足作为参数给出的条件。
    • 我需要根据其他集合过滤许多。现在使用循环。更新的代码。有没有其他办法?
    • 如果你想删除名字为 Murali 的鞋,那么你可以像 lst.RemoveAll(l => l.Name== "Murali")
    • 实际上我将根据 Ids 删除。他们是未知的。如此循环
    【解决方案4】:
    int removeIndex = list.FindIndex(l => e.Id== 2);
    if( removeIndex != -1 )
    {
        list.RemoveAt(removeIndex);
    }
    

    试试这个可能对你有用

    【讨论】:

      【解决方案5】:

      你写错了你的 lambda。应该是这样的

      var item=empList.Find(l => l.Id== 2);
      

      【讨论】:

      • 抱歉,我更新了问题。错误地我在这里输入了这样的内容。但在代码中它是正确的并且正在构建
      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2022-12-20
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多