我的课程如下
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吗?
答案 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.Where和Enumerable.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));