c# – List.RemoveAll – 如何创建一个合适的谓词

这是一个noob问题 – 我还是相当新的C#和泛型和全新的谓词,代表和lamda表达式…

我有一个类’查询’,其中包含另一个类名为“车辆”的通用列表。我正在建立代码来添加/编辑/删除车辆从父查询。而在目前,我专门看看删除。

从我到目前为止,我看到,我可以使用Vehicles.RemoveAll()删除一个项目与特定VehicleID或所有项目与特定的EnquiryID。我的问题是理解如何喂.RemoveAll正确的谓词 – 我看到的例子太简单了(或者我太简单,因为我缺乏谓词,委托和lambda表达式的知识)。

因此,如果我有一个List< Of Vehicle>每个车辆都有EnquiryID的车辆,我如何使用Vehicles.RemoveAll()删除给定EnquiryID的所有车辆?

我知道有几种方法,所以我会热衷于听到方法之间的差异 – 尽管我需要得到一些工作,这也是一个学习练习。

作为一个补充问题,是一个通用列表这些对象的最佳存储库?我的第一个倾向是一个集合,但它似乎我过时了。当然,泛型似乎是首选,但我很好奇其他的选择。

谢谢

最佳答案
RemoveAll()方法接受谓词< T>委托(直到这里没有什么新东西)。谓词指向简单地返回true或false的方法。当然,RemoveAll将从集合中删除所有返回True的T实例,并应用谓词。

C#3.0允许开发人员使用几种方法将一个谓词传递给RemoveAll方法(而不仅仅是这一个…)。您可以使用:

Lambda表达式

vehicles.RemoveAll(vehicle => vehicle.EnquiryID == 123);

匿名方法

vehicles.RemoveAll(delegate(Vehicle v) {
  return v.EnquiryID == 1;
});

正常方法

vehicles.RemoveAll(VehicleCustomPredicate);
private static bool
VehicleCustomPredicate (Vehicle v) {
    return v.EnquiryID == 1; 
}

转载注明原文:c# – List.RemoveAll – 如何创建一个合适的谓词 - 代码日志