簡體   English   中英

在if…else條件下優化邏輯

[英]Optimized logic in an if…else condition

如果...其他條件,是否有人有優化的邏輯來遵循?
腳本

  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;
}

這是您應該做的:

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 (...)
  {
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM