ReSharper并删除多余的括号。 C#中的OR与AND逻辑

时间:2017-03-22 01:41:22

标签: c# resharper

我最近注意到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条件?

1 个答案:

答案 0 :(得分:6)

在C#中,运营商有一个优先顺序。从the docs开始,您可以看到&&出现在||之前,因此从技术上讲,Resharper是正确的,这些括号是多余的。

话虽如此,你觉得把它们放进去更明显 - 然后让它们进去。代码的可读性应该始终是优先考虑的事。