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

条件运算符与自增:如何精简实现条件自增置零逻辑

「满足条件自增、否则重置数值」的精简写法

你之前试的NoReadsInSequence = noRead ? ++: 0;跑不通,原因很简单:++是单目运算符,必须跟操作数搭配用,不能单独放在三元表达式的分支里当返回值,不符合C#这类类C语言的语法规则。

几种可落地的写法

  • 最通用的单行三元写法
    这是行业里用得最多的单行实现,不用单独写自增语句,符合条件就返回当前值+1,不符合就返回0:
    NoReadsInSequence = noRead ? NoReadsInSequence + 1 : 0;
    
    虽然变量名在等号左右各出现一次,但逻辑直白,谁看了都能马上懂,比硬凑「完全不重复写变量名」的花活实用得多。
  • 利用隐式转换的超短写法(不推荐生产环境用)
    类C语言里基本都有布尔值转整数的规则:true转成1,false转成0,靠这个规则可以把代码压得更短:
    NoReadsInSequence = ++NoReadsInSequence * noRead;
    
    逻辑是不管条件成不成立先自增,条件不成立就乘0直接重置,条件成立乘1保留自增结果。但可读性极差,不熟悉隐式转换的人看了得反应半天,除非是玩代码高尔夫,不然别写这种坑队友的代码。
  • 严格不重复写变量名的写法
    如果非要满足「不重复写NoReadsInSequence」的要求,C# 7.0以上可以靠ref局部变量实现,先给原变量起个别名,后续操作别名就行:
    ref var seq = ref NoReadsInSequence;
    seq = noRead ? seq + 1 : 0;
    
    纯粹是为了满足规则硬凑的写法,实际开发里一点收益都没有,平白多了一行声明,完全没必要。

额外提一句:你最开始写的if/else版本其实是可读性最高的,一点都不冗余。写代码别盲目追求短,可维护性永远比代码行数少重要。

内容的提问来源于stack exchange,提问作者Martin Hertig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:36:21