优化了if…else条件下的逻辑

本文关键字:条件下 else if 优化 | 更新日期: 2023-09-27 18:12:20

是否有人有一个优化的逻辑以下如果…其他的条件……场景

  1. 有三个日期参数:DateFrom, DateUntil和NewDateUntil。
  2. If DateFrom <= DateNewUntil And DateUntil > NewDateUntil then添加警告消息并返回true
  3. If DateFrom > DateNewUntil And DateUntil > DateNewUntil then添加警告消息并返回false
  4. If DateUntil < DateNewUntil然后是returns true
    原始代码如下注释。尝试了一些优化。
    请看
代码

public bool ValidateDate(DateTime pDateFrom, DateTime pDateUntil, DateTime pNewDateUntil)
{
  ////Original Code
  //if ((pDateUntil.Date > pNewDateUntil.Date))
  //{
  //  if ((pDateFrom.Date <= pNewDateUntil.Date))
  //  {
  //    pDateUntil = pNewDateUntil;
  //    AddWarningMessage("Warning Message");
  //    return true;
  //  }
  //  else if ((pDateFrom.Date > pNewDateUntil.Date))
  //  {
  //    AddWarningMessage("Warning Message");
  //    return false;
  //  }
  //}
  //else
  //{
  //  return true;
  //}
  //Optimized As:
  bool returnValue = false;
  if ((pDateUntil > pNewDateUntil.Date))
  {
    returnValue = pDateFrom <= pNewDateUntil.Date ? true : false;
    AddWarningMessage("Warning Message");
  }
  else
  {
    returnValue = true;
  }
  return returnValue;
}

优化了if…else条件下的逻辑

你应该这样做:

bool returnValue = pDateUntil <= pNewDateUntil.Date || pDateFrom <= pNewDateUntil.Date;
if ((pDateUntil > pNewDateUntil.Date))
{
    AddWarningMessage("Warning Message");
}
return returnValue;

Resharper告诉我你可以这样做:

bool returnValue;
if ((pDateUntil > pNewDateUntil.Date))
{
    returnValue = pDateFrom <= pNewDateUntil.Date;
    AddWarningMessage("Warning Message");
}
else
{
    returnValue = true;
}
return returnValue;

你能做的只有几件事。你应该对if语句进行"排序",从最有可能的语句开始。请注意,编译器通常会很好地优化这些情况,并且分支预测也会有所帮助。

  if (condition_is_true_the_most often)
  {
      // your code here
  }
  else if (condition_is_true_less_often)
  {
      // your code here
  }
  .
  .
  .
  else if (...)
  {
  }