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, чтобы увидеть примеры различий в условных выражениях: