比较if-else,switch-case和Contains()的性能,可读性和可重用性

时间:2011-07-15 09:32:29

标签: c# performance if-statement switch-statement

我有以下代码(这是一个示例,还有许多其他条件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-caseContains()switch-caseContains()来重构此代码。

对于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 个答案:

答案 0 :(得分:3)

大规模的第一步,每次停止Session["Yapilanislem_Popup"].ToString(),得到一次:

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

然后使用案例陈述:

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情况下会发生任何其他逻辑/测试。

编辑:“看起来你正在写一个状态机”(ala clippy)。请参阅nextState变量的使用,以使其更加明显。

答案 1 :(得分:1)

我无法注意到,使用Convert.ToString(session["value"])代替Session["Value"].ToString()总是更好,因为它也会处理您的空对象。