有很多人包阔我在前台总会出现大批的if else判断自己看的很脏
各种场景都有如:举例子
用户场景
if(如果用户帐号密码正确)
{
   //就判定用户是否锁定
   if(如果用户没被锁定)
    {
        if(如果用户今天是第一次登陆)
         {
             //...就给用户送5个积分
         }
    }
    else
     {
        //...失败提示信息
     }
}
else
{
   //...失败提示信息
}
---------订单场景------
if(如果定单未支付)
{
  1:支付确认按钮设置可用
  2:发货按钮设置不可用
  3:到货确认按钮设置不可用
}
else if(如果定单已经支付)
{
  1:支付确认按钮设置不可用
  2:发货按钮设置可用
  3:到货确认按钮设置不可用
}
else if(如果定单已发货)
{
  1:支付确认按钮设置不可用
  2:发货按钮设置不可用
  3:到货确认按钮设置可用
}我这里写了2个场景 有时候逻辑复杂点if else 把自己否搞晕了!请教大牛们你们是如何设计 最好提供相关代码学习下
谢谢!

解决方案 »

  1.   

    switch()
    case 
    调整下结构,会看的更清楚点
      

  2.   

    用户场景
    if(密码不正确){
        //错误
        return false;
    }if(用户被锁定){
        // 错误
        return false;
    }if(第一次登录){
        // 送5个积分
    }
    return true;
      

  3.   

    switch...case  毫无疑问....再不然拉出来公共方法.循环去调用判断返回值
      

  4.   

    如果if中只一句话,而且else中也一句话,那就使用三元运算符 ? : 完成功能
      

  5.   

    switch 。。case  可相对搜段代码如果你对三元运算符号有兴趣可以用三元运算符号
    根据你的大概意思 可缩写成如下一行代码登录成功 =true ?  (第一次登录=true?送分:"xxx") : 提示失败
      

  6.   

    在某些情况下,3楼的方法还是不错的,特别在js里。switch case可以使用在if else有3层或3层以上的3元运算符非常不容易理解。另外如果你使用的是js代码,那么可以试试这种方式,简单,但是唯一的缺点就是不容易懂,不过用多了,自然就熟悉了。var a = true;
    var i = 0; j = 0;
    a && (i = 5);
    a || (j = 5);
    alert(i);
    alert(j);
    //上面的语句的意思就是
    if(a){
        i = 5;
    }
    if(!a){
        j = 5;
    }
    //&& 和 || 可以结合使用。不过这样就不容易看懂了。
      

  7.   

    不喜欢用IF-ELSE,那就写个接口,出来的东西用不同的类去继承,调用的时候直接调用接口,代码看上去会简洁一些
      

  8.   

    switch case
    和提取公共方法.
      

  9.   

    用个function 把它包住。要是还不理想的和话,你就不要写代码了。改行吧!
      

  10.   


    这个也不错,不用SWITCH可以用这个
      

  11.   

    switch()
    case  
      

  12.   

    用事件来处理.像下面这两段,第一段是业务逻辑层,第二段的前台页面./// <summary>
    /// 登录
    /// </summary>
    /// <param name="code">代理商工号</param>
    /// <param name="pwd">密码明文</param>
    /// <returns></returns>
    public AgentInfo Login(string code, string pwd)
    {
    if (string.IsNullOrEmpty(code))
    throw new Exception("代理商工号不能为空");
    if (string.IsNullOrEmpty(pwd))
    throw new Exception("密码不能为空");
    AgentInfo agent = this.Get(code);
    if (agent == null)
    throw new Exception("没有这个代理商编号");
    pwd = this.MD5(pwd.ToLower());
    if (!agent.Password.Equals(pwd))
    throw new Exception("密码错误");
    //...
    OnAfterLogin(new AgentEventArgs(agent));
    return agent;
    }private void Logon(object sender, EventArgs e)
    {
    if (string.IsNullOrEmpty(chk.Text))
    {
    ltl_note.Text = "验证码不能为空";
    }
    else if (chk.Text.ToLower() != Session[CheckCode.LoginCode].ToString().ToLower())
    {
    ltl_note.Text = "验证码不正确";
    }
    else
    {
    try
    {
    ags.AfterLogin += new AgentEventHandler(this.CheckLogin);
    AgentInfo agent = ags.Login(uid.Text, pwd.Text);
    Session[SessionName] = agent;
    Response.Redirect("Main.aspx");
    }
    catch (Exception ex)
    {
    ltl_note.Text = ex.Message;
    }
    }
    }
    private void CheckLogin(object sender, AgentEventArgs e)
    {
    //试用代理商再判断是不是已经有本区域正式代理商了。
    if (e.Agent.Status == AgentStatusDefine.试用)
    {
    List<AgentInfo> list = ags.List(e.Agent.Area);
    if (list != null && list.Count > 0)
    {
    int count = list.Count(a => a.Status == AgentStatusDefine.正式);
    if (count > 0)
    {
    throw new Exception("本地区已经有正式代理商,试用代理商不能再登);
    }
    }
    }
    }
      

  13.   

    if(楼主给我一半的分){
        楼主将会长命百岁,生活幸福美满
    }else{
        楼主只是长命百岁
    }
      

  14.   

    switch 和 if 有什么两样???
    差不多哦!
      

  15.   

    3楼的方法不一定好,最理想的是一个函数里只有一个return语句。分支多了,增加程序复杂度。
      

  16.   

    ASP.NET我不太懂,你可以试试将每个判断做成函数,根据返回值的组合来判断下一步怎么处理。