C#中if条件内的赋值操作行为为何与预期不符?
核心原理说明
在C#中,赋值表达式a = b本身存在返回值,返回值就是你赋予变量的b的值,并非所有赋值表达式的判断结果都为true。
对应代码现象解释
你贴出的代码运行结果完全符合C#的语法规则:
Foo方法中if (someVar = true)的执行逻辑:- 先执行赋值操作,将
true赋值给someVar - 整个赋值表达式的返回值为
true,if条件判断通过,所以对应打印语句会执行
- 先执行赋值操作,将
Bar方法中if (someVar = false)的执行逻辑:- 先执行赋值操作,将
false赋值给someVar - 整个赋值表达式的返回值为
false,if条件判断不通过,所以对应打印语句不会执行
你的相关猜测完全正确,正是因为赋值后表达式返回值为false,才没有进入对应代码块。
- 先执行赋值操作,将
额外提示
if条件内直接写赋值语句很容易因手滑把相等比较符==误写为赋值符=导致逻辑bug,多数代码规范和静态检查工具都会对这类写法给出告警。如果确实需要在判断前先赋值,建议显式补充比较逻辑提升可读性,比如写成if ((someVar = GetBooleanValue()) == true)。
内容的提问来源于stack exchange,提问作者prakharvashisht
相关产品推荐
相关产品推荐

