2012-06-04 59 views
-2

我知道這是一個非常新手C#的問題,但我實現一個小程序,它具有以下功能:分配值bool內while循環

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(); 
} 
} 
} 

在while循環的結束,我本來期望bool值爲true,但打印爲false。這是爲什麼?從C++,我會做類似的東西,並在C#一樣的東西是給我假

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

補充代碼會改變問題.... – Jared

+2

值得一提的是,在這樣的條件表達式中引起副作用通常是不好的做法。突變效應應該在循環內部,並且條件應該是無副作用的。 – Servy

回答

6

你看到這種現象的原因是由於所涉及的運算符優先級本不同。這裏&&強於=所以在循環的代碼實際上是結合如以下

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

number > 3一旦所述&&表達是false並且被分配到isRun值並且同時終止循環結合。因此,一旦循環退出,您將看到isRunfalse

要獲得您正在查找的行爲,您需要手動更正parens的優先順序。

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

注:在一般情況下,@Servey指出,當地人以表達分配循環謂詞中被認爲是不好的做法。許多C#用戶實際上會對代碼編譯感到驚訝,因爲他們已經習慣於僅使用==循環。

在這個模式的循環的第一行,簡單地設置isRuntrue更爲通俗易懂。

while (number < 3) { 
    isRun = true; 
    ... 
} 
-1

的問題是,你已經boolean變量設置你false並沒有賦予它回到true,在while循環你matching它反對value true,因此failsevery情況。

+1

他將它分配給true,而不是將其與true進行比較。它是'='不是'=='。 – Servy