我有以下代码(这是一个示例,还有许多其他条件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()
则会有更少的代码行。
我也担心性能问题。
哪一个在性能,可读性和可重用性方面更好用?
答案 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()
总是更好,因为它也会处理您的空对象。