在 while 表达式语句中执行代码

Executing code inside the while expression statement

        int VillainId = -1;
        Console.Write("Enter VillainId: ");
        while (!int.TryParse(Console.ReadLine(), out VillainId))
        {
            Console.WriteLine("You need to enter a valid Villain Id!");
            Console.Write("Enter VillainId: ");
        }

谁能告诉我 while(**this code here**){//rest of the code} 中的代码是如何工作的。我知道它是否在 {} 内,但它在条件和循环中,直到它成功解析一个数字。它是如何工作的?

int.TryParse() returns true 如果转换成功并且 ! (logical negation operator) 反转 boolean 右侧的值(!true等于 false).

while中的条件在每个循环中进行评估,因此,每个无效输入都会执行while()中的块代码。

流程基本上是:

Console.Write("Enter VillainId: ");
// asks to user input

while (!int.TryParse(Console.ReadLine(), out VillainId))
// while the conversion is not successfull
{
    Console.WriteLine("You need to enter a valid Villain Id!");
    Console.Write("Enter VillainId: ");
    // asks for user to input valid data
}

int.TryParse returns 如果成功解析从 Console.ReadLine() 获取的字符串,则为真。前面的!表示对int.TryParse返回的boolean值取反,所以while执行parens中的代码,如果int.TryParsereturns false,false 被反转为 true 并且 while 再次执行 - 一次又一次,直到 int.TryParse returns 为真。 "The while executes" 表示先执行括号中的代码,然后如果结果为 true,则 while 的主体也执行。

这是编写相同代码的另一种方法。它有点不紧凑,但可能更容易理解:

int VillainId = -1;
bool parseOK = false;
do
{
    Console.Write("Enter VillainId: ");

    parseOK = int.TryParse(Console.ReadLine(), out VillainId);

    if (!parseOK)
    {
        Console.WriteLine("You need to enter a valid Villain Id!");
    }
} while (! parseOK);