C#優(yōu)化if...else代碼的方案總結(jié)
前言
在編寫代碼實現(xiàn)業(yè)務(wù)需求過程中,會使用到大量的if...else 判斷語句。隨業(yè)務(wù)復雜程度不同,導致判斷語句出現(xiàn)多層嵌套、多分支等情況,導致代碼可讀性變差、增加維護難度。要減少、消除這種復雜的、面條式代碼,需要編寫代碼時多注意編程風格,盡量規(guī)避if...else 的復雜化。學習一些代碼的優(yōu)化之道,培養(yǎng)自己的易讀、美觀代碼風格。
方案
1、提前 return ,去除不必要的 else
缺點:對較多的 if...else 沒什么大的效果。
示例:
#region 優(yōu)化前
if (string.IsNullOrEmpty(this.txtOrderNo.Text))
{
MessageBox.Show("訂單號不能為空,請輸入訂單號。");
this.txtOrderNo.Focus();
}
else
{
// 出處業(yè)務(wù)邏輯
}
#endregion
#region 優(yōu)化后
if (string.IsNullOrEmpty(this.txtOrderNo.Text))
{
MessageBox.Show("訂單號不能為空,請輸入訂單號。");
this.txtOrderNo.Focus();
return;
}
// 出處業(yè)務(wù)邏輯
#endregion2、使用條件三目運算符
缺點:對只有 一個 if...esle 兩個選擇時,才會有效果。如果有多個時,閱讀理解會更費力。
示例:
#region 優(yōu)化前
if ("CaiNiao".Equals(templateType, StringComparison.OrdinalIgnoreCase))
{
// 設(shè)置按鈕可見
this.btnCaiNiao.Visible = true;
}
else
{
// 設(shè)置按鈕不可見
this.btnCaiNiao.Visible = false;
}
#endregion
#region 優(yōu)化后
// 設(shè)置按鈕是否可見
this.btnCaiNiao.Visible = "CaiNiao".Equals(this.templateType, StringComparison.OrdinalIgnoreCase) ? true : false;
#endregion3、使用 switch
if...else 的使用場景,都能用 switch 代替,在分支選擇較多時,盡量使用 switch。
示例:
#region 優(yōu)化前
if (keyValue==120)
{
// 按 F9 快捷鍵光標定位到產(chǎn)品輸入框
this.txtProductNo.Focus();
}
else if (keyValue==121)
{
// 按 F10 快捷鍵光標定位到訂單輸入框
this.txtOrderNo.Focus();
}
else if (keyValue==122)
{
// 按 F11 快捷鍵審核
this.ApproveOrder();
}
#endregion
#region 優(yōu)化后
switch (this.CurrentKeyValue)
{
case 120:
// 按 F9 快捷鍵光標定位到產(chǎn)品輸入框
this.txtProductNo.Focus();
break;
case 121:
// 按 F10 快捷鍵光標定位到訂單輸入框
this.txtOrderNo.Focus();
break;
case 122:
// 按 F11 快捷鍵審核
this.ApproveOrder();
break;
default:
break;
}
#endregion4、合并條件表達式
梳理和歸納邏輯判斷,使其變更為更簡單易懂的邏輯判斷代碼。
示例:
#region 優(yōu)化前
string expressCode ="DOUYIN-YTO"
string templateurl=string.Empty;
string[] splitCode = expressCode..Split('-');
if (splitCode.Length >= 2)
{
if (expressCode.Contains(splitCode[1]))
{
templateurl="http://url.com/test.html"
}
}
#endregion
#region 優(yōu)化后
string expressCode = "DOUYIN-YTO";
string templateurl = string.Empty;
string[] splitCode = expressCode.Split('-');
if (splitCode.Length >= 2 && expressCode.Contains(splitCode[1]))
{
templateurl = "http://url.com/test.html";
}
#endregion5、使用枚舉
將條件作為枚舉的值,這種可以避免使用大量的 if...else 語句。
示例:
#region 優(yōu)化前
int platformID = 0;
string platformCode ="DOUYIN";
if ("PINDUODUO".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 1;
}
else if ("DOUYIN".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 2;
}
else if ("KUAISHOU".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 3;
}
else if ("SHIPINHAO".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 4;
}
else if ("AIKUCUN".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 5;
}
else if ("XIAOHONGSHU".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 6;
}
#endregion
#region 優(yōu)化后
// 定義一個數(shù)據(jù)枚舉
public enum Platform
{
PINDUODUO=1,
DOUYIN,
KUAISHOU,
SHIPINHAO,
AIKUCUN,
XIAOHONGSHU
}
Platform platform;
bool result=Enum.TryParse<Platform>("SHIPINHAO", out platform);
int platformID = Convert.ToInt32(platform);
// 需判斷SHIPINHAO是否枚舉
if (platformID==0)
{
// 異常處理
}
#endregion6、使用字典
將條件作為字典的鍵,將處理方法作為字典的鍵值。這樣可以避免使用大量的 if...else 語句。
示例:
#region 優(yōu)化前
int platformID = 0;
string platformCode ="DOUYIN";
if ("PINDUODUO".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 1;
}
else if ("DOUYIN".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 2;
}
else if ("KUAISHOU".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 3;
}
else if ("SHIPINHAO".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 4;
}
else if ("AIKUCUN".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 5;
}
else if ("XIAOHONGSHU".Equals(platformCode, StringComparison.OrdinalIgnoreCase))
{
platformID = 6;
}
#endregion
#region 優(yōu)化后
// 定義一個數(shù)據(jù)字典
Dictionary<string,int> platformDictionary = new Dictionary<string,int>();
platformDictionary.Add("PINDUODUO",1);
platformDictionary.Add("DOUYIN", 2);
platformDictionary.Add("KUAISHOU", 3);
platformDictionary.Add("SHIPINHAO", 4);
platformDictionary.Add("AIKUCUN", 5);
platformDictionary.Add("XIAOHONGSHU", 6);
int platformID = 0;
string platformCode = "DOUYIN";
if (platformDictionary.ContainsKey(platformCode))
{
platformID = platformDictionary[platformCode];
}
#endregion小結(jié)
以上介紹了一些優(yōu)化 if...else 語句的方法,使代碼更加清晰、易于維護和擴展。當然還有其它優(yōu)化方法(可留言提供你的方法一起進步)。希望本文的一些方法能為你帶來幫助。如有不到之處,請多多包涵。
相關(guān)文章
VS2010寫的程序在自己電腦可以運行、其他電腦上不能運行的解決方案
自己用Visual Studio 2010 旗艦版寫了一個軟件,在自己電腦上運行完全沒有問題,但是拷貝到其他人電腦上之后不管雙擊還是以管理身份運行,均沒有反應(yīng),進程管理器中相關(guān)進程也只是一閃而過2013-04-04
C#調(diào)用FFplay實現(xiàn)播放視頻功能
這篇文章主要為大家詳細介紹了C#如何調(diào)用FFplay實現(xiàn)播放視頻功能,文中的示例代碼講解詳細,具有一定的參考價值,有需要的小伙伴可以跟隨小編一起學習一下2023-10-10
C#把數(shù)組中的某個元素取出來放到第一個位置的實現(xiàn)方法
這篇文章主要介紹了C#把數(shù)組中的某個元素取出來放到第一個位置的實現(xiàn)方法,涉及C#針對數(shù)組的常見操作技巧,非常具有實用價值,需要的朋友可以參考下2014-12-12

