2011-09-01 25 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

"Too Localized"の理由でこの質問を締めくくった人がいましたが、同じ種類のコードを書く必要があるシナリオにどれくらいの頻度で遭遇しましたか?私は数回以上持っていることを知っています。このようなタスクに専用のマイクロデザインパターンが必要です。 –

答えて

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

他の記事は、あなたが欲しい1の「AddClass」を呼び出して、その後、すべての項目に「RemoveClass」を呼び出すことをお勧め。しかし、 "RemoveClass"メソッドが何をしているかによって、そのようにすることでパフォーマンスが低下する可能性があります。私が投稿したソリューションは、追加の不要なメソッド呼び出しを必要とせずに適切なメソッドを呼び出すだけで、はるかに短くなっています。