传播 return 的最佳方式

Best way to make a return propagate

我找不到这个问题的答案,可能是因为我没有以正确的方式提出这个问题。

因此,我正在编写 class 中的方法,有时我希望它测试字符串的格式。如果不正确,我希望它向用户显示一条消息,并停止执行,以便用户可以修复该错误。我有这个:

                if (Is not properly formated)
                {
                    //get error information

                    //show error box with the formation error line
                    MessageBox.Show(String.Format(
                        "Error message{0}",
                        errorLine.ToString()), "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    return; 
                }

当然这样会停止这个方法的执行,但是我想停止main方法(一个按钮点击方法)的执行。

在 C# 中执行此操作的最佳方法是什么?

您可以编写一个验证方法,如果值有效,returns true,并且可选地 return 一个 string 告诉什么是错误的:

private bool Validate(string s, out string error)
{
    if (string.IsNullOrEmpty(s))
    {
        error = "s is null";
        return false;
    }
    else
    {
        error = null;
        return true;
    }
}

然后调用它:

string error;
if (!Validate(null, out error))
{
    MessageBox.Show(error);

    // Do something
}

如果您想构造可能的错误列表,您可以使用 enum 而不是 string

你真的应该在 C# 中使用异常,例如

private void Calculate(string[] lines)
{
    try
    {
        lines.ForEach(Validate);

        // process lines
    }
    catch(InvalidArgumentException ex)
    {
        MessageBox.Show(...);
    }   
}

private void Validate(string s)
{
    if(s.IsNullOrEmpty)
        throw new InvalidArgumentException(/* some details here*/);
}