如何通过id删除List中的多个对象?

noo*_*Dev 3 c# list object remove-if

我有一个课程如下

class MyClass
{
    public string id { get; set; }
    public string data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一系列我需要删除的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"};
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以删除myObjArray中的myObj,其中id在idToBeRemove字符串中?

Ant*_*ram 9

List<T>有一种方法RemoveAll可以满足你的需要.与执行类似操作不同Where(...).ToList(),它将修改现有列表而不是创建新列表.

myObjArray.RemoveAll(item => idToBeRemove.Contains(item.id));
Run Code Online (Sandbox Code Playgroud)

请注意,随着要删除的项目数组的增长,您需要转移到更高性能的项目,例如a HashSet<T>,尽管当前计数为2,但这并不是迫切需要.

@Richardissimo也在你的问题的评论中提出了一个很好的建议,即主列表本身何时增长,这Dictionary<K, V>可能是有用的.同样,不是立即需要一个小列表,但随着它的增长和性能是一个问题需要记住.