0

コード内の if ステートメントの変数 intAge の下に赤い線でエラーが表示されます。変数がローカルであると書かれていますが、コードの最初で宣言されている場合、どのようにローカルである可能性がありますか? Try/Catch 部分と関係がありますか? 私のコードがそのように見える理由は、このタスクのコードで Try/Catch を使用する必要があるためです。これを同様の正しい方法で解決するためのいくつかの提案を高く評価しますか? ありがとう!

int intAge;

        try
        {
            intAge = int.Parse(age);
        }
        catch (Exception)
        {
            MessageBox.Show("Enter an age in numbers!","Error!");
        }
        finally
        {

        }
        // Check input
        if (intAge < 1)
        {
            inputOk = false;
            errorMessage = "Please enter 1 or higher!";
        }
4

5 に答える 5

3

int.Parse が失敗した場合、intAge 変数は初期化されません。デクレレーションで初期化できます

int intAge = 0;

二重エラーを回避できます:

    int intAge;

    if (!int.TryParse(age, out intAge))
    {
        inputOk = false;  
        errorMessage = "Enter an age in numbers!";  
    }
    else
    {
        // Check input  
        if (intAge < 1)  
        {  
            inputOk = false;  
            errorMessage = "Please enter 1 or higher!";  
        }
    }
于 2012-07-06T09:01:15.337 に答える
3

intAge を初期化するだけです。

int intAge = 0;

割り当てられていないローカル変数の使用エラーが発生しています。

try ブロックで値を割り当てているため、コンパイラは割り当てが行われるかどうかを判断できず ( ifint.Parse(age)が例外をスローする場合)、 if(intAge<1)変数を使用しているため、チェックでエラーが発生します。以前に割り当てられていません。

明確な代入 - MSDN

関数メンバーの実行可能コード内の特定の場所で、変数が自動的に初期化されているか、少なくとも 1 つの割り当てのターゲットであったことをコンパイラが静的フロー解析によって証明できる場合、その変数は確実に割り当てられていると言われます。

于 2012-07-06T09:00:26.607 に答える
2

ローカル スコープで宣言されているため、ローカルです。あなたのコードは、次のように構造化されている可能性があります。

int intAge;

if (!int.TryParse(age, out intAge))
{
    MessageBox.Show(...
}
else
{
    if (intAge < 1)
        {
            inputOk = false;
            errorMessage = "Please enter 1 or higher!";
        }
}

上記のコードでは、数値以外のエラーと 1 未満のエラーの 2 つのエラーが表示されます。

于 2012-07-06T09:01:02.710 に答える
1

コンパイラはintAge、初めて使用したときにローカル変数が初期化されていない可能性があると警告します。これはint.Parse(age)、 が例外をスローしたときに発生する可能性があります。これを修正するには、intAge適切な値に初期化します。

于 2012-07-06T09:03:35.823 に答える
0

問題は age が初期化されていないことです 0 に初期化して、 を試してください。それは動作する必要があります

于 2012-07-06T09:16:45.670 に答える