gpt4 book ai didi

c# - 为什么我可以在 LINQ 条件之外保留参数?

转载 作者:太空狗 更新时间:2023-10-30 01:19:07 26 4
gpt4 key购买 nike

我正在阅读 this answer关于如何在字符串中搜索数组中包含的任何字符串。该解决方案非常简洁:

if(stringArray.Any(stringToCheck.Contains))

我的问题是,Contains() 项为什么不需要显式参数?我会把上面的写成:

if(stringArray.Any(s => stringToCheck.Contains(s)))

使用这个简化版本的规则是什么?

最佳答案

Any 需要一个函数 (Func)(我假设 stringArray 只是一个字符串)

  1. 接受一个char输入
  2. 返回一个 bool

最常见的使用方法是创建一个内联匿名函数(一个 lambda 表达式)。但是,您可以改为传递实际函数。系统将查看参数和返回类型以确保它们匹配,就像 lambda 语句一样。

碰巧 Contains 函数将 char 作为输入并返回 bool。这就是为什么您可以传递函数名称而不是调用它(使用带有参数列表的括号)的原因。

以我们自己做函数为例:

public static bool Contains2 (this string input, char c)
{
//....
}

stringArray.Any(stringToCheck.Contains2)

这也符合要求。请注意 Contains2 上没有 () 括号。这是因为我们正在传递函数本身

您的 lambda 也可以工作,因为它接受一个字符输入 (s =>) 并返回一个 bool 值(Contains(s) 的结果)。

关于c# - 为什么我可以在 LINQ 条件之外保留参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289523/

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