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

技术咨询:是否可编写包含if语句的表达式体成员,以及能否用表达式体成员重写指定方法

关于C#表达式体成员的两个问题解答

问题1:能不能写包含if语句的表达式体成员?

嘿,这个问题问得好!直接说结论:不行直接把if语句塞到表达式体里。因为表达式体成员的=>右侧要求是一个表达式(要么能返回值,要么是像方法调用、throw这类的void表达式),而if是个语句,不属于表达式范畴,语法上通不过。

不过咱们有替代方案呀:

  • 如果你的成员有返回值(比如普通函数、属性的getter),可以用三元条件运算符来模拟条件判断逻辑,比如:
    public string GetUserStatus(bool isActive) => isActive ? "在线" : "离线";
    
  • 如果是返回void的方法,要是逻辑是条件抛异常或者简单操作,也可以用三元运算符配合throw表达式(C# 7.0及以上版本支持);但如果逻辑复杂到必须用多分支if,那还是老老实实用带{}的常规方法体吧,表达式体本来就适合简洁逻辑~

问题2:能不能用表达式体重写那个Checkup方法?

必须可以!自从C# 7.0支持把throw作为表达式后,这个需求就很容易实现了。

先看看原方法:

private void Checkup() { if (errorCondition) throw new InvalidOperationException("Error"); }

用表达式体重写后的版本:

private void Checkup() => _ = errorCondition ? throw new InvalidOperationException("Error") : default;

这里的_ =是用来接收三元运算符的返回值(毕竟三元运算符要求两个分支的类型匹配,throw表达式的类型是never,能和任何类型兼容,default就充当了另一个分支的占位符)。

内容的提问来源于stack exchange,提问作者G. Lari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:52:36