如何将C#中对象非空校验后赋值的逻辑简化为单行代码?
如何在不使用if语句的情况下给非空对象的属性赋值?
针对你想简化的这段逻辑:
if(obj!=null) { obj.prop = false; }
可以根据使用的编程语言选择以下单行写法:
JavaScript/TypeScript
利用逻辑与运算符&&的短路求值特性——只有左边表达式为真时,才会执行右边的代码:
obj && (obj.prop = false);
当obj为null或undefined时,&&会直接返回obj,不会执行后面的赋值操作;只有obj非空时,才会执行obj.prop = false,完全匹配原逻辑。
C#
C# 中无法直接通过?.进行赋值,但可以用逻辑与运算符结合括号实现单行写法:
obj != null && (obj.prop = false);
这里同样利用短路求值,obj != null为真时才会执行赋值操作。另外也可以用null条件运算符结合赋值的变通写法,但可读性不如前者:
_ = obj?.Prop == null ? null : (obj.Prop = false);
需要注意的是,虽然这些写法实现了单行无if的需求,但可读性未必比简洁的if单行写法(if(obj != null) obj.prop = false;)更高,实际开发中可以根据团队规范选择。
内容的提问来源于stack exchange,提问作者Prabhat K
相关产品推荐
相关产品推荐

