当前位置: 代码网 > it编程>编程语言>C# > C#优化if...else代码的方案总结

C#优化if...else代码的方案总结

2024年07月03日 C# 我要评论
前言在编写代码实现业务需求过程中,会使用到大量的if...else 判断语句。随业务复杂程度不同,导致判断语句出现多层嵌套、多分支等情况,导致代码可读性变差、增加维护难度。要减少、消除这种复杂的、面条

前言

在编写代码实现业务需求过程中,会使用到大量的if...else 判断语句。随业务复杂程度不同,导致判断语句出现多层嵌套、多分支等情况,导致代码可读性变差、增加维护难度。要减少、消除这种复杂的、面条式代码,需要编写代码时多注意编程风格,尽量规避if...else 的复杂化。学习一些代码的优化之道,培养自己的易读、美观代码风格。

方案

1、提前 return ,去除不必要的 else

缺点:对较多的 if...else 没什么大的效果。

示例:

#region 优化前
if (string.isnullorempty(this.txtorderno.text))
{
    messagebox.show("订单号不能为空,请输入订单号。");
    this.txtorderno.focus();
}
else
{
    // 出处业务逻辑
}
#endregion


#region 优化后
if (string.isnullorempty(this.txtorderno.text))
{
    messagebox.show("订单号不能为空,请输入订单号。");
    this.txtorderno.focus();
    return;
}
// 出处业务逻辑
#endregion

2、使用条件三目运算符

缺点:对只有 一个 if...esle 两个选择时,才会有效果。如果有多个时,阅读理解会更费力。

示例:

#region 优化前
if ("cainiao".equals(templatetype, stringcomparison.ordinalignorecase))
{
    // 设置按钮可见
    this.btncainiao.visible = true;
}
else
{
    // 设置按钮不可见
    this.btncainiao.visible = false;
}
#endregion


#region 优化后
// 设置按钮是否可见
this.btncainiao.visible = "cainiao".equals(this.templatetype, stringcomparison.ordinalignorecase) ? true :  false;
#endregion

3、使用 switch

if...else 的使用场景,都能用 switch 代替,在分支选择较多时,尽量使用 switch。

示例:

#region 优化前
if (keyvalue==120)
{
    // 按 f9 快捷键光标定位到产品输入框
    this.txtproductno.focus();
}
else if (keyvalue==121)
{
    // 按 f10 快捷键光标定位到订单输入框
    this.txtorderno.focus();
}
else if (keyvalue==122)
{
    // 按 f11 快捷键审核
    this.approveorder();
}
#endregion


#region 优化后
switch (this.currentkeyvalue)
{
    case 120:
        // 按 f9 快捷键光标定位到产品输入框
        this.txtproductno.focus();
        break;
    case 121:
        // 按 f10 快捷键光标定位到订单输入框
        this.txtorderno.focus();
        break;
    case 122:
        // 按 f11 快捷键审核
        this.approveorder();
        break;
    default:
        break;
}
#endregion

4、合并条件表达式

梳理和归纳逻辑判断,使其变更为更简单易懂的逻辑判断代码。

示例:

#region 优化前
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 优化后
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";
}
#endregion

5、使用枚举

将条件作为枚举的值,这种可以避免使用大量的 if...else 语句。

示例:

#region 优化前
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 优化后
// 定义一个数据枚举
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)
{
    // 异常处理
}
#endregion

6、使用字典

将条件作为字典的键,将处理方法作为字典的键值。这样可以避免使用大量的 if...else 语句。

示例:

#region 优化前
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 优化后
// 定义一个数据字典
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

小结

以上介绍了一些优化 if...else 语句的方法,使代码更加清晰、易于维护和扩展。当然还有其它优化方法(可留言提供你的方法一起进步)。希望本文的一些方法能为你带来帮助。如有不到之处,请多多包涵。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com