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

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

简化方法和属性">

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  # 一加  # c#  # String  # 运算符  # 构造函数  # 析构函数  # int  # void  # public  # 运算符重载  # 委托  # console  # this  # 单条  # 也不  # 什么时候  # 也能  # 很多人  # 适用于  # 将其  # 已是  # 不支持 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  如何构建满足综合性能需求的优质建站方案?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  什么是javascript作用域_全局和局部作用域有什么区别?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  JS碰撞运动实现方法详解  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  网站建设保证美观性,需要考虑的几点问题!  百度浏览器如何管理插件 百度浏览器插件管理方法  微信小程序 require机制详解及实例代码  如何在阿里云香港服务器快速搭建网站?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何快速生成专业多端适配建站电话?  jQuery中的100个技巧汇总  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  网站制作企业,网站的banner和导航栏是指什么?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Swift中switch语句区间和元组模式匹配  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  中国移动官方网站首页入口 中国移动官网网页登录  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Python函数文档自动校验_规范解析【教程】  jQuery 常见小例汇总  装修招标网站设计制作流程,装修招标流程?  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel如何实现数据库事务?(DB Facade示例)  如何在IIS中新建站点并配置端口与IP地址?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  用yum安装MySQLdb模块的步骤方法  香港服务器租用每月最低只需15元?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何挑选高效建站主机与优质域名?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Python自动化办公教程_ExcelWordPDF批量处理案例  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何快速上传自定义模板至建站之星?