-2

これは非常に初心者のC#の質問であることは知っていますが、次のことを行う小さなプログラムを実装しています:

namespace ConsoleApplication
{
    class Program
{
static void Main(string[] args)
        {
    bool isRun = false;
                int number = 0;
                while (isRun = (true) && number < 3)
                {
                    ++number;
                    Console.WriteLine("Number = {0}", number.ToString());
                    Console.WriteLine();
                }
                Console.WriteLine(isRun.ToString());
                Console.ReadLine();
}
}
}

boolwhile ループの最後で、値が true であると予想していましたが、出力されてfalse. 何故ですか?これは、私が何かをしたであろう C++ とは異なりますか? C# で同じことが私に false を与えています

while(number<3)
{
is = true;
}
if(is){
cout<<true;
}
4

2 に答える 2

6

この動作が見られる理由は、関連する演算子の優先順位によるものです。ここでは、ループ内のコードは実際には次のようにバインドされています&&=

while (isRun = (true && number < 3)) {
  ...
}

式が値に割り当てられるとnumber > 3、同時にループが終了します。したがって、ループが終了すると、次のように表示されます&&falseisRunisRunfalse

探している動作を得るには、括弧で優先順位を手動で修正する必要があります。

while ((isRun = (true)) && number < 3) {
  ...
}

注:一般に、@Serveyが指摘したように、ループ述語内の式へのローカルの割り当ては悪い習慣と見なされます。==多くの C# ユーザーは、ループ内で のみ使用するように条件付けされているため、コードがまったくコンパイルされることに実際に驚くでしょう。

このパターンのループの最初の行で単純に設定isRunする方がより慣用的です。true

while (number < 3) {
  isRun = true;
  ...
}
于 2012-06-04T15:21:53.790 に答える
-1

問題は、変数をに割り当てたり、割り当てたりせずに、whileループでboolean変数をに設定していることです。したがって、万が一の場合に備えてです。falsetruematchingvalue truefailsevery

于 2012-06-04T15:24:25.717 に答える