gpt4 book ai didi

c# - c# 中没有参数的方法仍然是一个方法?

转载 作者:太空狗 更新时间:2023-10-30 00:07:47 24 4
gpt4 key购买 nike

我要做的就是检查列表 B 的所有元素是否都在列表 A 中

        if (listA.All(element => listB.Contains(element))
{
return;
}

有人提出了另一种解决方案,说这行得通而且行之有效!

       if (listA.All(listB.Contains))
return;

现在,(我知道它有效),

  1. 为什么编译器不需要在第二种方法中使用 () near contains?
  2. 如果将来,比方说,我希望比较不区分大小写,我该如何使用第二种方法?

提前致谢。

最佳答案

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 .你可以通过 predicate1predicate2进入 All 方法。跟你提供的代码是一样的,只不过是直接传predicate,而不是先存到一个变量里,再把变量传入。

Contains方法实际上并没有作为参数调用。它仅由 All 内部调用方法。

如果您想进行不区分大小写的搜索,使用与上述相同的语法,您将需要一个执行不区分大小写搜索的方法。不过,您始终可以只使用自定义匿名方法:

listA.All(x => listB.Any(
z => string.Equals(x, z, StringComparison.OrdinalIgnoreCase)));

关于c# - c# 中没有参数的方法仍然是一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17404471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com