3

私の質問は、このエラーを解決する方法に関するものではありません(私はすでに解決しました)が、なぜこのエラーがブール値であるのですか?

私の機能は

private string NumberToString(int number, bool flag)
{
    string str;

    switch(flag)
    {
        case true: 
            str = number.ToString("00");
            break;
        case false:
            str = number.ToString("0000"); 
            break;
    }

    return str;
}

エラーはUse of unassigned local variable 'str'です。Bool は true または false のみを取ることができます。したがってstr、どちらの場合でも入力されます。では、なぜこのエラーが発生するのでしょうか?

さらに、true と false のケースと共にケースを追加すると、このエラーはなくなりますが、defaulttrue と false とは別に bool を保持できるものは何ですか?

bool変数を使用したこの奇妙な動作はなぜですか?

4

5 に答える 5

9

ブール変数に switch ステートメントを書くのは、ちょっと無駄に思えます。条件演算子 ( ) を使用しない理由?::

private string NumberToString(int number, bool flag)
{
    return flag ? number.ToString("00") : number.ToString("0000"); 
}

コードはもう少し簡潔に見え、ローカル変数は必要ありません。

しかし、コードがコンパイルされない理由についての質問に戻ります => 変数は常に割り当てられる必要があり、この割り当ては条件ステートメント内で行われるべきではないためです。

于 2012-06-19T09:17:55.883 に答える
7

表示されるエラーはstring変数に関するものであり、可能な値ではありません boolean

誰も実行する方法がないという事実はcases(この場合) 真実ですが、コンパイラはコードの分析にそれほど進んでいません。割り当てられておらず、いくつかの条件で使用されていない変数を調べるだけで、デフォルトの変数がないため、割り当てられていないままになる場合あるとします。

于 2012-06-19T09:18:42.763 に答える
4

strswitch ステートメントのケースが変数に値を割り当てるため、変数が割り当てられていない理由を尋ねようとしていると思いますが、コンパイラーはそれがケースステートメントのいずれかに該当するかどうかを判断できません。返品時のエラーstr

文字列の割り当てでデフォルトのケースを追加すると、コンパイラは str が何らかの値を保持することを確実に認識し、それがエラーを発生させない理由です

于 2012-06-19T09:17:46.663 に答える
3
private string NumberToString(int number, bool flag)
{
    string str = "";

    switch(flag)
    {
        case true: 
            str = number.ToString("00");
            break;
        case false:
            str = number.ToString("0000"); 
            break;
    }

    return str;
}

これを書きます string str = "";-値を割り当てる必要があります

デフォルトのケースを追加すると、割り当てなしでスイッチのケースを通過する可能性はありません。今は

于 2012-06-19T09:16:05.117 に答える