【问题标题】:leave if statement离开 if 语句
【发布时间】:2009-12-21 20:32:49
【问题描述】:

我在 if 语句中有一个 if 语句。

如果第二个if语句中的条件返回false,我想去第一个else 因为它会自动设置我的验证控件。

希望你能理解

if (page.isvalid() )
{
    if (datetime.tryparse (date) == true)
    {
        // ok    
    } 
    else
    {
       //go to the other else
    }
}
else
{
    // want to go here
}

编辑:

重要的是我必须首先验证页面,因为在验证之后,我知道我可以解析来自 2 个输入控件的日期时间并检查第二个输入控件是否大于第一个。否则,如果日期无效,它可能会引发异常。

【问题讨论】:

    标签: asp.net validation


    【解决方案1】:

    代替 DateTime.Parse(date) 使用

    DateTime dt;
    bool isParsed = DateTime.TryParse(date, out dt);
    
    //if ( page.isvalid() && (datetime.parse (date) == true) )   
    if ( page.isvalid() && isParsed )   
    {        
         // ok        
    }     
    else    
    {       
        // want to go here
    }
    

    【讨论】:

    • 这是一个很好的布尔检查,但是当页面有效且日期时间未解析时,它会落入 //want to go here 部分,这似乎不正确。
    • 它可能看起来不“正确”,但这正是提问者所要求的。
    • @Jim - 这是 OP 要求的!
    • 我使用 tryparse。刚刚在 sackoverflow 中快速写到这里。是的,这就是吉姆舒伯特所说的问题。
    • 即使 page.isvalid() 失败,它也会调用 DateTime.TryParse(又名 datetime.tryparse()?)。为什么不直接在页面已知有效时调用解析器?
    【解决方案2】:

    取出其他的,它应该是你要找的。另外,在一切顺利后添加return语句。

    if ( page.isvalid() )
    {
        if (datetime.parse (date) == true)
        {
            // ok    
        } 
        return;
    }
    
    // code here happens when it's not valid.
    

    【讨论】:

    • 这适用于很少的适应。嗯似乎不太合适,但......没有其他完整的解决方案
    • “正确”是什么意思?这是基本的流量控制。请记住,在 .NET 语言中,void 方法会在遇到最后一个 } 时隐式返回。在任何时候退出方法都是完全有效的。根据您的上下文,您可能需要翻转逻辑以说出if(!Page.IsValid){ /* invalid code block */ } else { /* valid code */ }。另一种选择是将“有效”代码和“无效”代码重构为方法并说if(Page.IsValid()) { ValidMethod(): } else { InValidMethod();}
    【解决方案3】:

    我相信这正是你想要的。

    if (page.isvalid() && datetime.tryparse(date) == true)
    {        
        // ok
    }
    else
    {
        // want to go here
    }
    

    不清楚'== true'是否必要;你也许可以放弃那个条件。

    【讨论】:

      【解决方案4】:

      正是你想做的事情是不可能的。有两种选择。一种是在 if 子句的顶部确定两个答案。这就是其他海报告诉你要做的事情。另一种选择是这样的:

      bool isvalid = true;
      if ( page.isvalid() )
      {    
          if (datetime.tryparse (date) == true)    
          {        
              // ok        
          }
          else    
          {       
              isvalid = false;    
          }
      }
      else
      {
          isvalid = false;
      }
      if (isvalid == false)
      {
          //do whatever error handling you want
      }
      

      这会从 else 子句中提取错误处理代码,并将其放在两个代码路径都可以到达的地方。

      【讨论】:

      • 非常冗长 - 准确,但非常冗长。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2017-12-20
      • 2016-03-26
      相关资源
      最近更新 更多