【问题标题】:Validation method to return result after first false在第一个 false 之后返回结果的验证方法
【发布时间】:2019-11-27 12:50:26
【问题描述】:

在第一次错误验证后返回结果的最佳方式是什么。我想在每次验证后不检查结果的情况下实现相同的功能。

bool ValidateMany()
{
  bool result=true;

  if(ValidateFirstProperty){
  result = ValidateFirst();
  if(result == false)
    return result;
  }

  if(ValidateSecondProperty){
  result=ValidateSecond();
  if(result == false)
    return result;
  }

  //always validate third one
  result=ValidateThird();
  if(result == false)
    return result;

return result;
}

【问题讨论】:

  • stackoverflow.com/questions/4820610/… 如果您之前没有看过&&,可能值得一读。
  • 那是不合适的@bugrasitemkar。您只是明显更改了问题,浪费了所有为原始问题写答案的人的时间。这不是“猜测问题将如何变化”的游戏。
  • 对不起,我刚意识到这是我一开始应该写的方式,并改变了我的伪代码。是的,这是最后一个问题。
  • if (ValidateFirstProperty && !ValidateFirst) return false; 将帮助您入门。使用这种方法,您可以将代码缩减至三行。使用|| 可以更短,但老实说,我认为可读性会受到影响。

标签: c#


【解决方案1】:

你可以把它们都放在同一个 if 块中,如果前一个不符合条件,它只会移动到下一个 &&。

bool ValidateMany()
{
  if(ValidateFirst() && ValidateSecond() && ValidateThird())
  {
      return true;
  }

  return false;
}

或者将它们组合成一行。

bool ValidateMany()
{
   return ValidateFirst() && ValidateSecond() && ValidateThird();
}

【讨论】:

【解决方案2】:

这是更干净的版本:

return ValidateFirst() && ValidateSecond() && ValidateThird();

【讨论】:

    【解决方案3】:

    我可以试试这个:

            bool ValidateMany()
            {
                return  ValidateFirst() && ValidateSecond() && ValidateThird();
            }
    

    【讨论】:

      【解决方案4】:

      更改问题后,这是简短版本:

      return (!ValidateFirstProperty  || ValidateFirst())
          && (!ValidateSecondProperty || ValidateSecond())
          && ValidateThird();
      

      但是你会丢失验证失败的信息,以防你想输出或记录它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-07
        • 2020-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        相关资源
        最近更新 更多