c# - 如何声明内联谓词委托(delegate)?

标签 c# delegates

所以我有一个对象,它有一些字段,什么都不重要。 我有这些对象的通用列表。

List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(myObject1);
myObjects.Add(myObject2);
myObjects.Add(myObject3);

所以我想根据某些标准从我的列表中删除对象。 例如,myObject.X >= 10. 我想使用 RemoveAll(Predicate<T> match)方法。

我知道我可以定义一个可以传递给 RemoveAll 的委托(delegate),但我想知道如何使用匿名委托(delegate)定义它,而不是创建一堆只在一个地方使用的委托(delegate)函数。

最佳答案

有两个选项,显式委托(delegate)或伪装成 lamba 构造的委托(delegate):

显式委托(delegate)

myObjects.RemoveAll(delegate (MyObject m) { return m.X >= 10; });

lambda

myObjects.RemoveAll(m => m.X >= 10);

在性能方面两者是平等的。事实上,两种语言结构在编译时生成相同的 IL。这是因为 C# 3.0 基本上是 C# 2.0 的扩展,所以它编译为 C# 2.0 构造

关于c# - 如何声明内联谓词委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59166/

相关文章:

c# - 如何在运行时提取多播委托(delegate)的结果?

c# - 如何使用方法调用作为参数

c# - 在 IOC 容器中使用委托(delegate)和事件时避免强制依赖关系

c# - 在单线程公寓中运行代码并返回值,我无法设置当前的公寓模型

c# - DelegateCommand 的 CanExecute 逻辑

c# - ASP.NET 在 If 语句的 .aspx 中使用 Bind/Eval

ios - ARC 中的系统对象委托(delegate)是否需要设置为 nil?

c# - 避免或修复 .Net Core 中的 namespace 污染

c# - 标准网络服务 (asmx) 是否与 MVC 一起工作?

ios - 委托(delegate)方法不触发?