1

这是我使用 with if 条件的一段代码Int32.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 中检查 n 的值,那么它正确地捕获了您输入的值,但是如果您检查 x 的值,它却是 0!- 任何想法如何克服这个问题?我想知道是什么导致了这种异常。

4

2 回答 2

5

你应该使用 && 而不是 ||, "||" 是说如果一个是真的,哪个是真的,所以它忽略了第二个。使用 && 两者都必须为真。

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

您的原始代码意味着它会这样做:

首先尝试解析 || 第二次尝试解析

第一个完成 > 直接进入 if 语句,第二个已通过则忽略。

使用 && 表示两者都必须为真。

有关这方面的更多信息,您可以使用 MSDN 查看条件语句中的差异示例:

&& 操作员

|| 操作员

于 2013-07-24T07:22:05.433 回答
2

当然 x 的值为 0,在解析为 n 之后,您的 or 条件中已经有了“true”,因此第二个 tryparse 将永远不会执行。如果您想确保两者都是可解析的,请使用 and 条件:

if ((Int32.TryParse(number, out n)) && (Int32.TryParse(bulbNumber, out x)))
于 2013-07-24T07:21:03.593 回答