技术咨询:是否可编写包含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
相关产品推荐
相关产品推荐

