[英]Method with no parameters in c# and still a method?
我要做的就是检查列表B中的所有元素是否都在列表A中
if (listA.All(element => listB.Contains(element))
{
return;
}
有人想出了另一个解决方案,说这会起作用并且有效!
if (listA.All(listB.Contains))
return;
现在,(我知道它有效),
提前致谢。
All
方法请求谓词作为参数: Func<T, bool>
其中T
是相同的类型是List<T>
。 此代码有效,因为它提供了这样的方法。 All
方法将返回一个值,该值指示在列表中的每个项上调用提供的谓词的结果是否为true
。 该参数是对Contains
方法的引用 ,该方法匹配所需的Func<T, bool>
,获取单个参数T
并返回bool
。
考虑以下两行代码:
Func<string, bool> predicate1 = s => s.Length > 5;
Func<string, bool> predicate2 = listB.Contains;
这两行都有效,因为赋值运算符右侧的表达式求值为采用单个string
参数的方法,并返回bool
。 您可以将predicate1
或predicate2
传递给All
方法。 它与您提供的代码相同,只是谓词是直接传递的,而不是先存储在变量中,而是传入变量。
但实际上并没有将Contains
方法作为参数调用。 它仅由All
方法在内部调用。
如果您想进行不区分大小写的搜索, 并使用与上面相同的语法,则需要一个执行不区分大小写搜索的方法。 您可以随时使用自定义匿名方法:
listA.All(x => listB.Any(
z => string.Equals(x, z, StringComparison.OrdinalIgnoreCase)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.