我遇到了问题。我有一个对象列表(车辆)。
List<Vehicle> vehicleList = Vehicle.GetVehiclesFromDatabase();
现在我想要这样的事情:
vehicleList.Remove(where vehicleList.Brand == "Volkswagen");
我希望我能解释一下我的问题所在。
非常感谢提前!
答案 0 :(得分:3)
您可以使用List<T>.RemoveAll
:
int recordsRemoved = vehicleList.RemoveAll(v => v.Brand == "Volkswagen");
该方法需要Predicate<T>
(= Func<T,bool>
),这将删除谓词返回true
的所有项目。
对于您来说,这等同于以下方法:
bool Filter(Vehicle vehicle)
{
return vehicle.Brand == "Volkswagen";
}
答案 1 :(得分:2)
您可以使用linq执行此操作,如此
vehicleList = vehicleList.Where(v => v.Brand != "Volkswagen").ToList();
您也可以使用RemoveAll
执行此操作vehicleList.RemoveAll(v => v.Brand == "Volkswagen");
答案 2 :(得分:1)
你可以这样做
var itemToRemove = vehicleList.Single(r => r.Brand == "Volkswagen");
resultList.Remove(itemToRemove);
如果您不确定该项目是否确实存在,则可以使用SingleOrDefault。如果没有项目,SingleOrDefault将返回null(Single将在无法找到项目时抛出异常)。当存在重复值时,两者都会抛出(两个具有相同id的项目)。
var itemToRemove = vehicleList.SingleOrDefault(r => r.Brand == "Volkswagen");
if (itemToRemove != null)
resultList.Remove(itemToRemove);