0

0

C# Expression Bodied Members方法 C#如何使用=>简化方法和属性

星降

星降

发布时间:2026-02-03 09:14:02

|

342人浏览过

|

来源于php中文网

原创

Expression Bodied Members 仅适用于方法、属性、索引器、构造函数、析构函数和运算符重载等成员,且其实现体必须是单条表达式(如 x * y),不能含语句块;编译器将其转为等效传统语法,无运行时开销。

c# expression bodied members方法 c#如何使用=>简化方法和属性

Expression Bodied Members 什么时候能用

只有方法、属性、索引器、构造函数、析构函数、运算符重载这些成员的实现体是单条表达式(不是语句块)时,才能用 =>。比如 return x + y; 可以,但 { Console.WriteLine("hi"); return x; } 不行——里面含语句,必须用传统大括号写法。

编译器会把 => 形式自动转成等效的传统语法,不带来运行时开销,纯属语法糖。

方法和只读属性怎么写最安全

方法用 => 最常见于无副作用、计算型逻辑;只读属性(get)也适合,但要注意:返回值不能是 void,也不能带 async(除非返回 TaskTask,且需配合 async 关键字)。

  • public int Square(int x) => x * x;
  • public string Name => _name ?? "unknown";
  • public Task GetDataAsync() => _httpClient.GetStringAsync(url);(注意:这行本身不加 async,因为右边已是 Task
  • 错误写法:public void Log() => Console.WriteLine("x"); —— void 不支持表达式体,必须用 {}

构造函数和索引器的限制很实际

构造函数可用 =>,但只能用于委托给另一个构造函数(this(...)base(...)),不能包含任意逻辑。索引器同理,getset 各自独立支持,但 set 的右侧必须是表达式,不能写 value = ... 这种赋值语句。

  • public Person(string name) : this(name, 0) => {};(合法,空体仅作语法占位)
  • public string this[int i] => _items[i];(只读索引器)
  • public string this[int i] { get => _items[i]; set => _items[i] = value; }(注意:右边是 _items[i] = value 表达式,不是语句)
  • 错误写法:set => { _items[i] = value; }; —— 大括号块不被允许

别在 async 方法里漏掉 async/await

很多人以为 async Task Foo() => await Something(); 能成立,其实不行:表达式体里不能直接用 await,因为 await 是语句级操作。正确写法是保留 async 关键字,并用大括号包裹 await 语句,或者让右侧直接返回一个已有的 Task

  • ✅ 正确:public async Task GetCountAsync() { return await _db.CountAsync(); }
  • ✅ 正确:public Task GetCountAsync() => _db.CountAsync();(不 await,直接转发 Task)
  • ❌ 错误:public async Task GetCountAsync() => await _db.CountAsync();(编译失败)

这个点最容易在迁移旧代码时忽略,尤其当团队习惯统一加 async 前缀时,容易误以为表达式体也能套用相同模式。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

523

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1505

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

233

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

107

2025.10.17

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

523

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

547

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

153

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

201

2025.08.29

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

89

2026.02.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号