c# - 如何在执行操作之前检查所有方法是否为真

标签 c# winforms

我遇到了一个问题,我在一个表单中实现了大约 5 次验证检查。其中每一个都位于其自己的方法 Is_XXX_Valid() 中。我正在寻找一种方法来确定每个方法 return true; 否则应该显示一条错误消息。

然而,这就是问题所在,我有一个部分有效的解决方案,因为如果先前的方法返回 false

,它将无法运行后续方法

这是我正在使用的当前代码:

private void Button_Click(object sender, EventArgs e)
  {
    DialogResult validation_msgbox = MessageBox.Show("Are you sure you would like to submit this form?", "Submit Form?", MessageBoxButtons.YesNo);

    // Run each validaion check

    if (IsAAAValid() && IsBBBValid())
    {
      //Continue and submit data
    }
    else
    {
      //Display the errors
      DialogResult Textbox_validation = MessageBox.Show(ErrorText, "Some errors were found.", MessageBoxButtons.OK);
    }
  }

以上面的代码为例,如果IsAAAValid()返回false,则不会执行第二个方法,因此不会验证其中的数据,如果出现多个错误,则会导致错误的对话框被发现。

谢谢!

最佳答案

这称为“短路评估”,您可以阅读有关 here 的内容并且是 C# 编程语言通常需要的功能。你可以用这样的方法绕过它:

bool avalid = IsAAAValid();
bool bvalid = IsBBBValid();
if (avalid && bvalid)
{
  //Continue and submit data
}

这将保证两种方法都能运行。

作为旁注,为了代码清晰,我建议您重命名验证方法以表明它们具有副作用。也就是说,它们不仅仅是简单地返回数据状态;他们实际上有可能修改状态。这就是短路评估在这种情况下会导致问题的原因。

关于c# - 如何在执行操作之前检查所有方法是否为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34402912/

相关文章:

c# - 在 WPF 中创建 16 位+ 灰度图像

c# - .net core 重定向到路由结果将 %2f 添加到 url

c# - 如何提取注册用户的数据?

c# - Shift + 鼠标滚轮水平滚动

c# - 系统线程: Cross-thread operation not valid

c# - 覆盖文本和 OnKeyUp/OnKeyPress

c# - 防止矩形样式应用于 DataGrid

c# - 来自另一个使用 WiX 的项目的引用版本字符串

c# - WinForms 拼写检查器推荐

使用 COM 端口/使用 USB 串行 COM 端口与 xbee 模块通信的 C# 程序