开发者

Simplify the code [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 11 years ago.
 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开发者_如何学Python;

            }
        }

Does anybody have any suggestions for how to simplify this code?


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


Put the controls in an array, then call RemoveClass on all the elements, and then AddClass on the active element.'

Edit: Code

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

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

Of course this is assuming that an additional call to RemoveClass has a negligible cost, otherwise use a regular for loop and skip the active index.


Here's another option that reduces code repetition and adhere more to the DRY principle:

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

Other posts suggest calling "RemoveClass" on all items, then calling "AddClass" on the one you want. However, depending on what the "RemoveClass" method does there could be performance consequences of doing it that way. The solution I have posted will only call the appropriate method without requiring any additional, unnecessary method calls, and it's much shorter.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜