所以我有一个对象,它有一些字段,什么都不重要。 我有这些对象的通用列表。
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/