2013-07-24 2 views
1

Вот мой кусок кода с помощью Int32.TryParse с, если условия. (Консольное приложение)Int.tryparse не работает правильно Если условие - любое объяснение?

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))) 
{ 
} 

если мы проверяем значение для п в quickwatch, то он правильно отражает значение, которое вы вход, но если вы установите флажок значение для x, это удивительно 0 !!! - Любые идеи, как преодолеть это? Интересно, что вызывает эту аномалию.

+0

Попробуйте разбор вне если заявления, только чтобы решить вашу проблему. – Oscar

+0

У вас есть условие '||' Or. это будет верно, когда число разобрано, и оно войдет в тело if. используйте '&&' вместо –

+0

Как упоминалось из-за || если первая часть условия оценивается как истинная, вторая часть инструкции не будет достигнута, поэтому x останется равным 0. – Ric

ответ

2

Конечно, значение x равно 0, после разбора на n вы уже получили «истинное» в своем или состоянии, поэтому второй 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

Смежные вопросы