我最近注意到ReSharper(2016.3)现在要删除C#语句中的冗余括号,我认为这会导致预期的行为发生变化。这是声明:
private bool GetAutoAdjust( int catType )
{
return ( catType == ChargeTypeIds.Penalty && _appSettingRepository.AutoRemovePen ) ||
( catType == ChargeTypeIds.Interest && _appSettingRepository.AutoRemoveInt ) ||
( catType == ChargeTypeIds.Discount && _appSettingRepository.AutoRemoveDis );
}
真的相当于这个?
private bool GetAutoAdjust( int catType )
{
return catType == ChargeTypeIds.Penalty && _appSettingRepository.AutoRemovePen ||
catType == ChargeTypeIds.Interest && _appSettingRepository.AutoRemoveInt ||
catType == ChargeTypeIds.Discount && _appSettingRepository.AutoRemoveDis ;
}
对于C#如何评估OR子句与SQL Server之类的东西相比,也许我错了,但是OR表达式只评估它的左边和右边的表达式,或者它实际上是预先连接所有的在评估OR条件之前的AND条件?
答案 0 :(得分:6)
在C#中,运营商有一个优先顺序。从the docs开始,您可以看到&&
出现在||
之前,因此从技术上讲,Resharper是正确的,这些括号是多余的。
话虽如此,你觉得把它们放进去更明显 - 然后让它们进去。代码的可读性应该始终是优先考虑的事。