首页 > 解决方案 > string.Contains 作为谓词而不是函数调用?

问题描述

我在 SO(不记得来自哪里:/)上找到了这个代码示例,它允许我在启动应用程序时检查行代码参数:

if (e.Args.Length == 0 || e.Args.Any("-show".Contains))
{
  //show interface...
}

我似乎无法理解它是如何"-show".Contains工作的。如果与(经典)有任何区别x => x.Contains('"-show")(除了明显的打字增益)。

像魅力一样工作,但我想了解为什么,我觉得有大事正在发生。

标签: c#linqpredicate

解决方案


这个:

.Any("-show".Contains)

基本上是这个的简写:

.Any(s => "-show".Contains(s))

Any方法将委托作为参数,您可以通过多种方式创建该委托。第一个片段使用方法组,而第二个片段使用 Lambda。

说第一个是第二个的简写并不准确,因为方法组早于 Lambda,但是如果您在调用 LINQ 方法时考虑 Lambda,Any那么实际上就是这种情况。


推荐阅读