You need to enable JavaScript to run this app. 将lambda表达式作为Linq的Count参数时如何确定x的指代
优惠活动
大模型
产品
解决方案
定价
更多

将lambda表达式作为Linq的Count参数时如何确定x的指代

首先我们可以从C#的类型机制、Linq扩展方法的规则两个层面理解这个逻辑:

  • 首先string类型在C#中已经默认实现了IEnumerable<char>接口,本质上就是一个可枚举的字符序列,所以可以直接调用针对IEnumerable<T>封装的Linq扩展方法,包括你用到的Count。
  • 你调用的带筛选条件的Count是泛型扩展方法,它的完整签名是:
public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)

其中被this修饰的第一个参数source就是调用方法的对象,也就是你的示例里的字符串s,编译器会自动根据s的IEnumerable<char>类型,推导出泛型参数TSource的实际类型是char。

  • 方法的第二个参数要求传入一个Func<TSource, bool>类型的委托,也就是输入一个TSource类型的参数、输出布尔值的方法。你写的x => x == 'h'是符合这个委托要求的lambda表达式,编译器会自动把lambda的输入参数x的类型推导为char,也就是s序列里的每一个元素。

你写的代码和下面的手动循环逻辑是完全等价的:

string s = "hello";
int count = 0;
foreach (char x in s)
{
    if (x == 'h')
    {
        count++;
    }
}

Linq的Count方法内部就是枚举s的每一个字符,每拿到一个字符就作为参数传入你写的lambda表达式做判断,符合条件就计数加一,所以lambda里的x自然就指代s里的每一个字符元素。

内容的提问来源于stack exchange,提问作者Rudie Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 22:15:04