咨询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
相关产品推荐
相关产品推荐

