我能够搜索列表中的每个项目,如果该项目存在,那么我将其从列表中删除,如下所示。
然而,我不是在编写那么多行代码,而是想知道有更好的方法。
var math = subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Math.ToString())).FirstOrDefault();
if (math != null) subclasses.Classes.Remove(math);
var chem= subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Chem.ToString())).FirstOrDefault();
if (chem!= null) subclasses.Classes.Remove(chem);
var physics= subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Physics.ToString())).FirstOrDefault();
if (physics!= null) subclasses.Classes.Remove(physics);
答案 0 :(得分:3)
如果Classes
是List<>
:
subclasses.Classes.RemoveAll(x => x.Id.Equals(Constants.Classes.Math.ToString())
|| x.Id.Equals(Constants.Classes.Chem.ToString())
|| x.Id.Equals(Constants.Classes.Physics.ToString()));
答案 1 :(得分:1)
2个步骤:
Remove()
,其中包含要删除的列表。 (假设原始的Remove是您自己的实现,并且是一个名为Classes的类的方法)Array.Contains()
获取要删除的列表像这样(在移动设备上,所以......):
string [] mathChemPhy = new string []
{
Constants.Classes.Math.ToString(),
Constants.Classes.Chem.ToString(),
Constants.Classes.Physics.ToString()
};
var itemsToRemove = subclasses.Classes.Where(x => mathChemPhy.Contains(x.Id)).ToList();
subclasses.Classes.Remove(itemsToRemove); // overloaded version of Remove that takes a list
答案 2 :(得分:1)
您可以使用Except扩展方法:
var exceptions = subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Math.ToString()
|| x.Id.Equals(Constants.Classes.Chem.ToString()
|| x.Id.Equals(Constants.Classes.Physics.ToString());
var result = subclasses.Classes.Except(exceptions);