0

if...else 条件に従うための最適化されたロジックを持っている人はいますか.....
シナリオ

  1. DateFrom、DateUntil、および NewDateUntil の 3 つの日付パラメーターがあります。
  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;
}
4

3 に答える 3

4

これはあなたがすべきことです:

bool returnValue = pDateUntil <= pNewDateUntil.Date || pDateFrom <= pNewDateUntil.Date;
if ((pDateUntil > pNewDateUntil.Date))
{
    AddWarningMessage("Warning Message");
}
return returnValue;
于 2013-05-06T07:54:05.197 に答える
1

Resharper は、次のことができると言っています。

bool returnValue;
if ((pDateUntil > pNewDateUntil.Date))
{
    returnValue = pDateFrom <= pNewDateUntil.Date;
    AddWarningMessage("Warning Message");
}
else
{
    returnValue = true;
}
return returnValue;
于 2013-05-06T07:54:19.867 に答える
0

それについてできることはほんのわずかです。if ステートメントを「並べ替え」、最も可能性の高いステートメントから開始する必要があります。コンパイラは通常、これらの状況を非常にうまく最適化し、役立つ分岐予測もあることに注意してください。

  if (condition_is_true_the_most often)
  {
      // your code here
  }
  else if (condition_is_true_less_often)
  {
      // your code here
  }
  .
  .
  .
  else if (...)
  {
  }
于 2013-05-06T08:00:28.143 に答える