2013-07-24 62 views
1

下面是使用Int32.TryParse與if條件我的一段代碼。(控制檯應用程序)Int.tryparse在If條件下無法正常工作 - 任何解釋?

Console.WriteLine("Enter the no of the person(value for n)"); 
string number = Console.ReadLine();    
Console.WriteLine("Enter the no of the bulb whose state you want to check(value for x)"); 
string bulbNumber = Console.ReadLine();   
if ((Int32.TryParse(number, out n)) || (Int32.TryParse(bulbNumber, out x))) 
{ 
} 

如果我們在快速監視n檢查值,然後將它正確地抓住了價值,你的輸入,但如果你檢查值爲x,這是令人驚訝的0! - 任何想法如何克服這一點?我想知道是什麼導致這種異常。

+0

嘗試if語句外解析,正好解決了你的問題。 – Oscar

+0

你有一個'||'或條件。當數字被解析並且它將進入if體時它會成立。使用'&&'而不是 –

+0

正如前面所提到的,因爲||如果條件的第一部分評估爲真,則不會達到聲明的第二部分,因此x保持爲0. – Ric

回答

2

當然,x的值是0,在解析到n之後,您或條件中已經有了「true」,所以第二個tryparse將永遠不會執行。如果你想確保兩者都是解析的使用和條件:

if ((Int32.TryParse(number, out n)) && (Int32.TryParse(bulbNumber, out x))) 
+0

非常感謝大家,現在有道理! – Kruizer

+0

@KuruvillaPhilip,沒問題。我還會考慮其他運營商,隨着您的進步,它們會變得非常有用! :)。您可以使用我答案中提供的鏈接找到您需要的內容。 –

5

您應該使用& &而非||,「||」在說如果一個人是真的,哪一個人會忽略第二個人。使用& &都必須是真實的。

if ((Int32.TryParse(number, out n)) && (Int32.TryParse(bulbNumber, out x))) 
{ 
     //Go crazy 
} 

你的原代碼,這意味着它會做到這一點:

第一的TryParse ||第二次tryparse

首先完成>直接if語句,忽略第二個已經通過。

隨着& &它說,必須爲真。

關於此的信息,您可以使用MSDN看到在條件語句的不同實例:

&& operator

|| operator