Int.tryparse не работает правильно, если условие - какое-либо объяснение?

Вот мой кусок кода с использованием Int32.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 в quickwatch, то оно правильно фиксирует введенное вами значение, но если вы проверите значение для x, оно удивительно равно 0!!! - Есть идеи как это побороть? Интересно, что вызывает эту аномалию.

2 ответа

Решение

Конечно, значение x равно 0, после разбора n вы уже получили "true" в вашем условии или в условии, поэтому второй трипарсинг никогда не будет выполнен. если вы хотите убедиться, что оба они разбираются, используйте условие и условие:

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

Вы должны использовать && вместо ||, "||" говорит, что если кто-то является правдой, то это так, он игнорирует второй. Использование && должно быть правдой.

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

Ваш оригинальный код означал, что он сделает это:

Первый трипсар || Второй трипс

Первое выполнено> прямо в операторе if, игнорирует второе при прохождении.

С && он говорит, что оба ДОЛЖНЫ быть правдой.

Для получения дополнительной информации об этом вы можете использовать MSDN, чтобы увидеть примеры различий в условных выражениях:

&& оператор

|| оператор

Другие вопросы по тегам