2013-05-06 48 views
0

沒有任何人有一個優化的邏輯如下如果... 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
    原始代碼在下面評論。嘗試了一些優化。
    請看看。

代碼

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

「優化邏輯」是什麼意思? – dougajmcdonald 2013-05-06 07:52:42

+0

你可以刪除'?順便說一句,真:假。 (雖然沒有對其進行優化,但確實使它不那麼奇怪) – harold 2013-05-06 07:53:07

+3

有時候最好不要優化並犧牲可讀性。我發現這對於日期邏輯尤其如此 – Steve 2013-05-06 07:55:44

回答

4

這是你應該做的:

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

ReSharper的告訴我,你可以做到以下幾點:

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

我很確定你不能刪除警告。 – harold 2013-05-06 07:55:04

+1

Resharper alse刪除了'AddWarningMessage(「Warning Message」);'? – 2013-05-06 07:55:40

+0

你也可以內聯'returnValue'。 – sloth 2013-05-06 07:59:37

0

你可以做只有很少的事情。你應該「排序」你的陳述,並從最可能的一個開始。請注意,編譯器通常會很好地優化這些情況,並且還有可幫助的分支預測。

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