如何通过ID删除列表中的多个对象?

时间:2018-11-28 06:25:55

标签: c# list object remove-if

我的课程如下

class MyClass
{
    public string id { get; set; }
    public string data { get; set; }
}

我需要删除一组ID:

List<myClass> myObjArray = new List<myClass>;

myClass myObj1 = new myClass { id = "1", data = "aaa"};
myClass myObj2 = new myClass { id = "2", data = "bbb"};
myClass myObj3 = new myClass { id = "3", data = "ccc"};
myClass myObj4 = new myClass { id = "4", data = "ddd"};

myObjArray.Add(myObj1);
myObjArray.Add(myObj2);
myObjArray.Add(myObj3);
myObjArray.Add(myObj4);

string [] idToBeRemove = {"1", "3"};

有什么方法可以删除idToBeRemove字符串中的id所在的myObjArray中的myObj吗?

4 个答案:

答案 0 :(得分:9)

develop具有方法master,该方法可以完成您需要的操作。与执行List<T>之类的操作不同,它将修改现有列表而不是创建新列表。

RemoveAll

请注意,随着要删除的项目阵列的增加,您将需要使用性能更高的产品,例如Where(...).ToList(),尽管当前的数量为2,但这并不是迫切需要的。 / p>

@Richardissimo在您的问题的注释中也提供了很好的建议,因为当主列表本身增长时,myObjArray.RemoveAll(item => idToBeRemove.Contains(item.id)); 可能会有用。再次强调,并不是一丁点的需求,而是随着性能的增长和性能的提高而要牢记的一点。

答案 1 :(得分:2)

要从现有的List中删除,您可以使用List.RemoveAll(Predicate)

myObjArray.RemoveAll(r => idToBeRemove.Contains(r.id));

要在新集合中获得结果,可以使用Enumerable.WhereEnumerable.Contains

var result = myObjArray.Where(m => !idToBeRemove.Contains(m.id)).ToList();

答案 2 :(得分:0)

  var result = myObjArray.Where(m => !idToBeRemove.Contains(m.id)).ToList();
            foreach (var item in result)
            {
                myObjArray.Remove(item);
            }

答案 3 :(得分:0)

使用它删除ID:

myObjArray.RemoveAll(item => idToBeRemove.Contains(item.id));