Сравнение if-else, switch-case и Contains () для производительности, читабельности и повторного использования - PullRequest
0 голосов
/ 15 июля 2011

У меня есть этот код ниже (это пример, есть много других условий, которые Session["Yapilanislem_Popup"].ToString() отличаются.).

       if (Session["Yapilanislem_Popup"].ToString() == "updatemustericeki")
        {
            KayitGuncelleme();
        }

        else if (Session["Yapilanislem_Popup"].ToString() == "updatemusterisenedi")
        {
            KayitGuncelleme();
        }           

            ///

        else if (Session["Yapilanislem_Popup"].ToString() == "yenitahsilat")
        {
            YeniKayit();
            Session["Yapilanislem_Popup"] = "updatetahsilat";
            BaslikLabel.Text = "Tahsilat Güncelle";
        }
        else if (Session["Yapilanislem_Popup"].ToString() == "yeniodeme")
        {
            YeniKayit();
            Session["Yapilanislem_Popup"] = "updateodeme";
            BaslikLabel.Text = "Ödeme Güncelle";
        }

Я хочу реорганизовать этот код с помощью switch-case или Contains() или switch-case и Contains().

Для Contains() Я думаю, что могу сделать это:

if (Session["Yapilanislem_Popup"].ToString().Contains("update"))
            {
                KayitGuncelleme();
            }
else if(Session["Yapilanislem_Popup"].ToString().Contains("yeni")){
YeniKayit();
                Session["Yapilanislem_Popup"] = "updateodeme";
                BaslikLabel.Text = "Ödeme Güncelle";

}

Для switch-case Я могу написать это для каждого случая.

Switch-case будет много строк кодов для большего количества условий Session["Yapilanislem_Popup"].ToString() однако, если я использую Contains(), будет меньшее количество строк кодов.

Я также обеспокоен проблемой производительности.

Какой из них лучше использовать в отношении производительности, читаемости и возможности повторного использования?

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Массивный первый шаг, прекратите делать Session["Yapilanislem_Popup"].ToString() каждый раз, получите его один раз:

string yapPopup = Session["Yapilanislem_Popup"].ToString();

Затем используйте оператор case:

string nextState = yapPopup; // default to no state change

switch (yapPopup)
{
case "yenitahsilat":
    YeniKayit();
    nextState = "updatetahsilat";
    BaslikLabel.Text = "Tahsilat Güncelle";
    break;

case "yeniodeme":
    YeniKayit();
    nextState = "updateodeme";
    BaslikLabel.Text = "Ödeme Güncelle";
    break;

default:
    if (yapPopup.Contains("update"))
    {
        KayitGuncelleme();
    }
    break;
}

Session["Yapilanislem_Popup"] = nextState;

Обратите внимание, что точные совпадения получают свои case, любая другая логика / тестирование происходит в случае default.

Редактировать: «Похоже, вы пишете конечный автомат» (а-ля Clippy). См. Использование переменной nextState, чтобы сделать ее более очевидной.

1 голос
/ 15 июля 2011

Я не мог не заметить, всегда лучше использовать Convert.ToString(session["value"]) вместо Session["Value"].ToString(), поскольку он также будет обрабатывать ваши нулевые объекты.

...