if .... else条件下的优化逻辑

时间:2013-05-06 07:50:03

标签: c# .net

是否有任何人有一个优化的逻辑来跟随if ... else条件......
示例

  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
    原始代码在下面评论。尝试了一些优化。
    请看看。
  5. 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;
    }
    

3 个答案:

答案 0 :(得分:4)

这是你应该做的:

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

答案 1 :(得分:1)

Resharper告诉我你可以做到以下几点:

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

答案 2 :(得分:0)

你只能做一些事情。你应该“排序”你的if语句并从最可能的语句开始。请注意,编译器通常会很好地优化这些情况,并且还有分支预测可以帮助。

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