1

如果从另一个方法调用,我的代码不会在真实条件下终止。例如,

void RunValidation()
{
    if (NameEntered == string.Empty)
    {
        MessageBox.Show("No name has been entered");
        return;
    }
}

void CreateUser()
{
    RunValidation();

    //Run more code
}

如果我在 create user 方法中调用验证方法,则会显示消息框,但即使指定了“return”,其余代码也会被执行。

如果验证代码不在方法内并直接在 CreateUser 方法中调用,则其余代码不会运行(这是我想要的)。我希望能够在许多其他方法中调用验证方法,如果条件为真,则停止执行方法中的其他代码。

这样做的正确方法是什么?我必须使用某种尝试和捕捉吗?

4

4 回答 4

2

您是从RunValidation方法返回,而不是从CreateUser方法返回。如果要CreateUser根据 的结果控制方法的流程RunValidation,请执行以下操作:

bool Validate()
{
    if (NameEntered.Equals(string.Empty))
    {
        MessageBox.Show("No name has been entered");
        return false;
    }
    return true;
}

void CreateUser()
{
    if (Validate())
    {
        // Run more code
    }
}

return语句仅影响当前方法。在此处阅读有关该return声明的更多信息。

于 2012-12-14T18:15:55.513 回答
2

return;退出RunValidation()方法。
它对调用它的函数没有影响。

相反,您应该RunValidation()返回一个布尔值,指示验证是否成功。
在调用方法中,您可以检查它是否返回false以及return;从那里返回。

于 2012-12-14T18:15:42.787 回答
1

you can do something like:

bool RunValidation()
{
    if (NameEntered == string.Empty)
    {
        MessageBox.Show("No name has been entered");
        return false;
    }
    return true;
}

void CreateUser()
{
    if(RunValidation())
    {

        //Run more code
     }
}
于 2012-12-14T18:17:32.563 回答
1

你在谈论这个代码块吗?

void RunValidation()
{
    if (NameEntered == string.Empty)
    {
        MessageBox.Show("No name has been entered");
        return;
    }
}

因为如果你是,我不知道它正在执行什么“其余代码”,因为在 return 语句之后没有代码。

如果你在谈论这个

void CreateUser()
{
    RunValidation();

    //Run more code
}

那么是的,仅仅因为RunValidation有一个 return 语句并不意味着它的调用方法会返回。这种行为会导致疯狂的错误。


现在,为了实现 yoru 预期的行为,您可以更改runValidation

bool RunValidation()
{
    if (NameEntered == string.Empty)
    {
        MessageBox.Show("No name has been entered");
        return false;
    }
    return true;
}

然后像这样称呼它

void CreateUser()
{
    if(RunValidation())
    {

        //Run more code
    }
}
于 2012-12-14T18:19:38.333 回答