1

ifステートメントで値を変更できないのはなぜですか?

        int amount;
        string inputbalk = inputbar.Text;

        if (inputbalk== string.Empty)
        {
            amount = Convert.ToInt32(inputbalk);
            amount = 1;
        }

        if (inputbalk != string.Empty)
        {
            amount = Convert.ToInt32(inputbalk);
            amount = 1;
        }

        int onepercent = amount/= 100;

「amount」は、2つの異なるifステートメントによって1に設定した場合でも、割り当てられていない変数として表示されます。

デバッグすると、次のようになります。「エラー1未割り当てのローカル変数「amount」の使用」


助けてくれてありがとう、それは修正/解決されました。

4

7 に答える 7

3

他の場合は2番目に変更してください

        if (inputbalk== string.Empty)
        {
            amount = Convert.ToInt32(inputbalk);
            amount = 1;
        }
        else
        {
            amount = Convert.ToInt32(inputbalk);
            amount = 1;
        }

コンパイラは、2つのifステートメントのいずれかが機能することを確認できないため、可変量がである可能性がある unassignedというエラーがスローされます。

表記法ではif/else、2つのコードブロックのうちの1つがとにかく実行されるため、コンパイラーはエラーをスローせず、すべてが希望どおりに機能します。

于 2012-04-18T08:45:24.197 に答える
1

inputbalkがnullになる可能性があります:)

于 2012-04-18T08:45:24.383 に答える
1
  1. ifループではありません
  2. を考えるinputbalkstring、それは可能性がありnullます、あなたはそれをチェックしないので、それあなたの場合である可能性があります。

次のようにコードを変更します。

if (string.IsNullOrEmpty(inputbalk))
{
     amount = Convert.ToInt32(inputbalk);
     amount = 1;
}

else
{
    amount = Convert.ToInt32(inputbalk);
    amount = 1;
}

お役に立てれば。

于 2012-04-18T08:46:37.977 に答える
1

なぜなら、ifステートメントに入ることができず、そのため金額が未割り当てのままになる可能性があるためです。この行でエラーが発生します:

 int onepercent = amount /= 100;

コンパイル時に、コンパイラーは、ifステートメントのいずれかがtrueおよび量の設定になるかどうかを判別できません。このエラーを回避するには、(開始時に)実行できます。

int amount=-1;

これで、コンパイラエラーが発生せず、量の値がifステートメントで変更されます。PS('If'はループではなくステートメントです)

于 2012-04-18T08:43:36.613 に答える
1

問題は、コンパイラがその量が確実に割り当てられていることを認識できないことです。inputBalkは、最初に評価されたときと2回目に評価されたときの間で変更できないこと、およびif条件の1つだけが真になることを知っていますが、コンパイラーはこれをチェックしません使用される前に金額が割り当てられていないパスがあることだけがわかりますが、これは許可されていません。

同じ条件を2回テストする代わりに、if/elseを使用する必要があります。

if (...)
{
    amount = 1;
}
else
{
    amount = 2;
}

これで、コンパイラーは、コード内のすべての可能なパスにより、量が確実に割り当てられることを確認できます。

他にも多くの利点があります。コードがより簡潔で、読みやすく、保守しやすいということです。さらに、同じチェックを2回行わないことで、パフォーマンスがわずかに向上します。

于 2012-04-18T08:47:20.923 に答える
1

ただし、Convert.ToInt32()メソッドでFormatExceptionが発生する可能性もあります。代わりにint.tryParseを使用することを検討してください。

于 2012-04-18T08:55:29.390 に答える
0

これを爆発させてください:

if (!int.TryParse(inputbar.Text, out amount))
    amount = 1;
于 2012-04-18T08:48:34.700 に答える