C#消除多层if-else嵌套

if-else结构本来是个好东西,我们平时也会经常使用它来做条件判断,但是万物有利也有弊如果if-else结构嵌套太深的话就不容易理清逻辑,所以我们应该尽量避免多层if-else嵌套情况的发生。
下面讲一个消除双层if-else嵌套的例子:

原始结构

class Test
{
    private string NestIf(int userId, string idCard)
    {
        string result = string.Empty;
        if (userId > 0)
        {
            if (ValidateData(userId, idCard))
            {
                result = "first";
            }
            else
            {
                result = "second";
            }
        }
        else
        {
            if (ValidateData(idCard))
            {
                result = "third";
            }
            else
            {
                result = "forth";
            }
        }
        return result;
    }

    private bool ValidateData(int userId, string idCard)
    {
        return (userId.ToString() + idCard).Equals("66666") ? true : false;
    }

    private bool ValidateData(string idCard)
    {
        return idCard.Equals("666") ? true : false;
    }
}

修改方案一

把外层的if判断条件加到内层中去,当内层两个判断条件都满足要求时才执行相应操作。
这样确实消除了双层if-else结构,但看上去逻辑还是不清晰,不知道大家有没有这样的感觉。

class Test
{
    private string NestIf(int userId, string idCard)
    {
        string result = string.Empty;

        if (userId > 0 && ValidateData(userId, idCard))
        {
            result = "first";
        }
        else if (userId > 0 && !ValidateData(userId, idCard))
        {
            result = "second";
        }
        else if (userId <= 0 && ValidateData(idCard))
        {
            result = "third";
        }
        else if (userId <= 0 && !ValidateData(idCard))
        {
            result = "forth";
        }

        return result;
    }

    private bool ValidateData(int userId, string idCard)
    {
        return (userId.ToString() + idCard).Equals("66666") ? true : false;
    }

    private bool ValidateData(string idCard)
    {
        return idCard.Equals("666") ? true : false;
    }
}

修改方案二

把外层的if判断条件加到内层的判断条件中用到的方法中去,在方法中判断userId是否大于0。

class Test
{
    public string NestIf(int userId, string idCard)
    {
        ReturnValue value = ValidateData(userId, idCard);
        return value.Result;
    }

    private ReturnValue ValidateData(int userId, string idCard)
    {
        ReturnValue returnValue = new ReturnValue();
        if (userId <= 0)
        {
            returnValue = ValidateData(idCard);
            return returnValue;
        }
        if ((userId.ToString() + idCard).Equals("66666") ? true : false)
        {
            returnValue.Status = true;
            returnValue.Result = "first";
        }
        else
        {
            returnValue.Status = false;
            returnValue.Result = "second";            
        }
        return returnValue;
    }

    private ReturnValue ValidateData(string idCard)
    {
        ReturnValue returnValue = new ReturnValue();
        if (idCard.Equals("666") ? true : false)
        {
            returnValue.Status = true;
            returnValue.Result = "third";
        }
        else
        {
            returnValue.Status = false;
            returnValue.Result = "forth";
        }
        return returnValue;
    }
}
internal class ReturnValue
{
    public bool Status { get; set; }
    public string Result { get; set; }
}

总结

消除多层if-else结构只是希望能够以一种更清晰的逻辑展示自己的代码,实际上并不会减少自己需要判断的情况种类,因此无论以怎样的方式消除多层if-else,在本例中本质上都是需要对四种情况进行判断并执行不同的操作,了解了这一点相信你会让自己的代码更简洁。
关于消除多层if-else结构,如果大家有更好的方法或更合适的例子欢迎一起交流。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changuncle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值