1

別のメソッドから呼び出された場合、私のコードは真の条件で終了しません。例えば、

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

void CreateUser()
{
    RunValidation();

    //Run more code
}

create userメソッド内でvalidationメソッドを呼び出すと、メッセージボックスは表示されますが、「return」が指定されていても、残りのコードは実行されます。

検証コードがメソッド内になく、CreateUserメソッドで直接呼び出された場合、残りのコードは実行されません(これが私が望むものです)。他の多くのメソッド内で検証メソッドを呼び出し、条件が真の場合は、メソッド内の他のコードの実行を停止できるようにしたいと考えています。

これを行う正しい方法は何ですか?ある種のトライアンドキャッチを使用する必要がありますか?

4

4 に答える 4

2

return;メソッドを終了しますRunValidation()
それを呼び出した関数には影響しません。

代わりにRunValidation()、検証が成功したかどうかを示すブール値を返す必要があります。
呼び出し元のメソッドでは、それが戻ってくるかどうか、falseそしてreturn;そこからも確認できます。

于 2012-12-14T18:15:42.787 に答える
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 に答える
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
}

そうです、RunValidationreturnステートメントがあったからといって、それがメソッドを呼び出しているからといって、それが返されるわけではありません。そのような振る舞いはクレイジーなバグを引き起こすでしょう。


今、夜の期待される動作を達成するために、あなたはに変更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 に答える