You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询C#中Func委托结合Lambda表达式的官方语法文档

Func委托结合Lambda表达式的语法文档及代码解析

官方文档覆盖范围

微软官方C#文档中完全覆盖了Func委托结合Lambda表达式的各类用法,核心涉及以下几个核心内容板块:

  • Lambda表达式语法:讲解Lambda的不同写法(表达式体、语句体),以及如何与委托(包括Func)进行绑定;
  • Func泛型委托:详细介绍Func的所有泛型重载形式,以及它作为方法参数、返回值的使用场景;
  • 闭包与变量捕获:解释Lambda捕获外部变量的机制,对应你遇到的返回绑定外部参数的委托这类场景。

代码示例解析

直接赋值Func变量的Lambda

你给出的这段代码是Func与Lambda结合的基础用法:

Func<SomeClass, bool> isActiveSelector = it => it.IsActive;

这里的Lambda表达式it => it.IsActive直接匹配Func<SomeClass, bool>的签名:接受SomeClass类型的输入参数it,返回bool类型的it.IsActive属性值,编译器会自动将Lambda转换为对应的Func委托实例。

返回Func委托的方法(闭包场景)

这段代码是返回委托类型的方法,同时用到了闭包捕获外部变量的特性:

public class Person 
{
    public string name {get; set;}
    public int Age {get; set;}
}
           
Func<Person, bool> IsOlderOrEqual(int age) =>
    pm => pm.Age >= age;
  • 方法IsOlderOrEqual接受一个int类型的age参数,返回Func<Person, bool>类型的委托;
  • 返回的Lambda表达式pm => pm.Age >= age捕获了外部方法的age参数,形成闭包。每次调用IsOlderOrEqual时,都会生成一个绑定了当前传入age值的委托实例,后续调用这个委托时会使用捕获的age值进行判断。

委托定义对应

你提到的Func<in T, out TResult>的官方定义确实为:

public delegate TResult Func<in T, out TResult>(T arg);

它是.NET预定义的泛型委托,专门用于封装“接受一个T类型参数、返回TResult类型结果”的方法,Lambda表达式是创建这类委托实例的简洁语法形式。

内容的提问来源于stack exchange,提问作者Tanveer-Ibn- Haresh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:37:09