比较if-else、switch-case和Contains()的性能、可读性和可重用性
本文关键字:可读性 性能 switch-case if-else Contains 比较 | 更新日期: 2023-09-27 18:02:37
我有下面的代码(这是一个示例,还有更多的其他条件,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()
,将会有更少的代码行数。
我也担心性能问题。
在性能、可读性和可重用性方面,哪一个更好?重要的第一步,不要每次都做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
的情况下。
编辑:"看起来你在写一个状态机"。
nextState
变量的使用,使其更明显。我忍不住注意到,使用Convert.ToString(session["value"])
而不是Session["Value"].ToString()
总是更好,因为它也会处理你的空对象