2011-09-01 115 views
1
private const string CurrentPageCssClass = "important"; 
     private void HidhLightCurrentPageIndex() { 

      switch (tpMain.ActiveTabIndex) { 
       case 0: 
        elblFirst.AddClass(CurrentPageCssClass); 
        elblSecond.RemoveClass(CurrentPageCssClass); 
        elblThird.RemoveClass(CurrentPageCssClass); 
        elblFouth.RemoveClass(CurrentPageCssClass); 
        elblFirth.RemoveClass(CurrentPageCssClass); 
        break; 
       case 1: 
        elblFirst.RemoveClass(CurrentPageCssClass); 
        elblSecond.AddClass(CurrentPageCssClass); 
        elblThird.RemoveClass(CurrentPageCssClass); 
        elblFouth.RemoveClass(CurrentPageCssClass); 
        elblFirth.RemoveClass(CurrentPageCssClass); 

        break; 
       case 2: 
        elblFirst.RemoveClass(CurrentPageCssClass); 
        elblSecond.RemoveClass(CurrentPageCssClass); 
        elblThird.AddClass(CurrentPageCssClass); 
        elblFouth.RemoveClass(CurrentPageCssClass); 
        elblFirth.RemoveClass(CurrentPageCssClass); 


        break; 
       case 3: 
        elblFirst.RemoveClass(CurrentPageCssClass); 
        elblSecond.RemoveClass(CurrentPageCssClass); 
        elblThird.RemoveClass(CurrentPageCssClass); 
        elblFouth.AddClass(CurrentPageCssClass); 
        elblFirth.RemoveClass(CurrentPageCssClass); 
        break; 
       case 4: 
        elblFirst.RemoveClass(CurrentPageCssClass); 
        elblSecond.RemoveClass(CurrentPageCssClass); 
        elblThird.RemoveClass(CurrentPageCssClass); 
        elblFouth.RemoveClass(CurrentPageCssClass); 
        elblFirth.AddClass(CurrentPageCssClass); 
        break; 

      } 
     } 

有沒有人有任何建議如何簡化這段代碼?簡化代碼

+1

這可能是[Code Review](http://codereview.stackexchange.com/) – Justin

+0

@Justin:Cool!我不知道有一個codereview.stackoverflow.com。 – Steven

+0

由於「本地化」的原因,有人投票結束此問題,但您多久遇到一個需要您編寫相同類型代碼的場景?我知道我有不止幾次。應該有一個微型設計模式專門用於這樣的任務。 –

回答

3

將控件放在數組中,然後在所有元素上調用RemoveClass,然後在活動元素上調用AddClass。

編輯:代碼

var controls = new[] { elblFirst, elblSecond, elblThird, elblFourth, elblFifth }; 
foreach (var control in controls) 
{ 
    control.RemoveClass(CurrentPageCssClass); 
} 

controls[tpMain.ActiveTabIndex].AddClass(CurrentPageCssClass); 

當然,這是假設,以RemoveClass額外調用有一個可以忽略不計的成本,否則使用常規的循環和跳過活動指數。

+0

沒有頭腦。你能給我一個代碼嗎? – Alexandre

+0

@Alex - 你去 –

+0

太棒了! – Alexandre

4
private const string CurrentPageCssClass = "important"; 
     private void HidhLightCurrentPageIndex() { 

      elblFirst.RemoveClass(CurrentPageCssClass); 
      elblSecond.RemoveClass(CurrentPageCssClass); 
      elblThird.RemoveClass(CurrentPageCssClass); 
      elblFouth.RemoveClass(CurrentPageCssClass); 
      elblFirth.RemoveClass(CurrentPageCssClass); 
      switch (tpMain.ActiveTabIndex) { 
       case 0: 
        elblFirst.AddClass(CurrentPageCssClass); 
        break; 
       case 1: 
        elblSecond.AddClass(CurrentPageCssClass);  
        break; 
       case 2: 
        elblThird.AddClass(CurrentPageCssClass); 
        break; 
       case 3: 
        elblFouth.AddClass(CurrentPageCssClass); 
        break; 
       case 4: 
        elblFirth.AddClass(CurrentPageCssClass); 
        break;  
      } 
     } 
2

這裏的另一個選項,減少代碼的重複和更加遵循DRY原則:

private const string CurrentPageCssClass = "important"; 

private void toggleClass(object elbl, bool addClass) { 
    if (addClass) { 
     elbl.AddClass(CurrentPageCssClass); 
    } else { 
     elbl.RemoveClass(CurrentPageCssClass); 
    } 
} 

private void HidhLightCurrentPageIndex() { 
    int index = tpMain.ActiveTabIndex; 
    toggleClass(elblFirst, index == 0); 
    toggleClass(elblSecond, index == 1); 
    toggleClass(elblThird, index == 2); 
    toggleClass(elblFouth, index == 3); 
    toggleClass(elblFirth, index == 4); 
} 

其他職位建議呼籲「RemoveClass」上的所有項目,然後調用「AddClass」你想要的。但是,根據「RemoveClass」方法的不同,可能會有這樣做的性能後果。我發佈的解決方案只會調用適當的方法,而不需要任何額外的,不必要的方法調用,而且它更短。