C#中() =>是什么意思

本文解释了C#中Lambda表达式的概念与用途,这是一种匿名函数形式,用于简化代码并提高可读性。Lambda表达式在.NET3.0之后被引入,常用于LINQ查询和其他函数式编程场景。

C#中() =>是什么意思

如题C#中()=>是什么意思,比如publicICommandAddCommand{get{if(this.addCommand==null)this.addCommand=newRelayCommand(()=>this.AddPerson(),()=>this.CanAddPerson());returnthis...展开

 我来答 

分享

 举报浏览 81529 次

7个回答

#星座# 巨蟹座以温柔著称,那么它的母性是天生的吗?

Asherwdh 
来自百度知道认证团队 2018-10-09

这是NET3.0以后的新特性 Lambda表达式 ,“Lambda 表达式”是一个匿名函数Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

扩展资料

关于Lambda表达式的使用方法

Lambda 用在基于方法的 LINQ 查询中,作为诸如 Where 和 Where 等标准查询运算符方法的参数。

使用基于方法的语法在 Enumerable 类中调用 Where 方法时(像在 LINQ to Objects 和 LINQ to XML 中那样),参数是委托类型 System..::.Func<(Of <(T, TResult>)>)。使用 Lambda 表达式创建委托最为方便。

例如,当您在 System.Linq..::.Queryable 类中调用相同的方法时(像在 LINQ to SQL 中那样),则参数类型是 System.Linq.Expressions..::.Expression<Func>,其中 Func 是包含至多五个输入参数的任何 Func 委托。

同样,Lambda 表达式只是一种用于构造表达式目录树的非常简练的方式。尽管事实上通过 Lambda 创建的对象的类型是不同的,但 Lambda 使得 Where 调用看起来类似。

在前面的示例中,请注意委托签名具有一个 int 类型的隐式类型输入参数,并返回 int。可以将 Lambda 表达式转换为该类型的委托,因为该表达式也具有一个输入参数 (x),以及一个编译器可隐式转换为 int 类型的返回值。(以下几节中将对类型推理进行详细讨论。)使用输入参数 5 调用委托时,它将返回结果 25。

资料来源:百度百科:Lambda表达式

<think>在C#中,“=>”符号主要有两种含义:Lambda表达式和表达式主体定义。 1. **Lambda表达式**:用于创建匿名函数或委托实例。例如: - `Func<int, int> square = x => x * x;` 表示一个接受int参数x并返回x平方的Lambda表达式。 - 在LINQ查询中常用:`var evenNumbers = numbers.Where(n => n % 2 == 0);` 2. **表达式主体定义(Expression-bodied members)**:从C# 6.0开始,=>可用于简化方法、属性、构造函数等成员的写法。例如: - 方法:`int Square(int x) => x * x;` 等价于 `int Square(int x) { return x * x; }` - 只读属性:`public string FullName => $"{FirstName} {LastName}";` - 构造函数:`public MyClass(string name) => this.name = name;` - 析构函数:`~MyClass() => Console.WriteLine("Destructed");` - 属性访问器:从C# 7.0开始支持get/set访问器使用=>,如: ```csharp private string _name; public string Name { get => _name; set => _name = value ?? "Default"; } ``` 总结:=>符号的核心作用是简化代码。在Lambda表达式中定义匿名函数逻辑,在表达式主体定义中替代大括号语法实现单行成员定义。 §§相关问题§§ 1. Lambda表达式与匿名方法在C#中有哪些主要区别? 2. 在哪些场景下使用表达式主体定义会提高代码可读性,哪些场景反而降低? 3. C#=>符号能否用于多行代码实现?如何实现? 4. Lambda表达式如何捕获外部变量?这会带来什么潜在风险? </think>在C#中,`=>` 符号主要有两种含义,具体取决于使用场景: ### 1. **Lambda表达式运算符** - 用于创建**匿名函数**(Lambda表达式) - 语法:`(参数) => 表达式` - 特点: - 左侧是输入参数(可省略括号) - 右侧是表达式或语句块 - 示例: ```csharp // 无参数 Func<int> getRandom = () => new Random().Next(); // 单参数(可省略括号) Func<int, int> square = x => x * x; // 多参数 Func<int, int, bool> isEqual = (a, b) => a == b; // 语句块(需用{}) Action<string> log = msg => { Console.WriteLine($"[{DateTime.Now}] {msg}"); }; ``` ### 2. **表达式主体定义(Expression-bodied members)** - 用于简化**方法、属性、索引器**等的实现 - 语法:`成员 => 表达式` - 适用场景: - **方法**(C# 6+) `int Add(int a, int b) => a + b;` - **只读属性**(C# 6+) `string FullName => $"{FirstName} {LastName}";` - **属性访问器**(C# 7+) ```csharp private string _name; public string Name { get => _name; set => _name = value ?? "Default"; } ``` - **构造函数/析构函数**(C# 7+) `public MyClass(string id) => this.Id = id;` `~MyClass() => Console.WriteLine("Destroyed");` ### 核心区别 | 场景 | 是否可包含语句块 | 典型用途 | |---------------------|------------------|-----------------------------| | Lambda表达式 | 是(用{}包裹) | 创建委托实例、LINQ查询 | | 表达式主体定义 | 否(仅单表达式) | 简化类成员实现 | ### 注意事项 - Lambda表达式右侧若是单条语句,可省略`{}`和`return` - 表达式主体定义**不能包含多条语句**,若需复杂逻辑仍需传统代码块
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值