为什么即使没有错误我的布尔值也会在catch块中变化?

时间:2018-09-12 17:56:16

标签: c#

我仍在学习c#并遇到了这个问题,我想制作一个确保用户输入整数的程序。但是当我这样做时,我陷入了无限循环。为什么是布尔b;即使用户键入了整数,变量也会在catch块中更改其值。 我的代码:

class MainClass
{
    public static void Main (string[] args)
    {
        int n= 0;
        bool b = true;
        do {
            try {
                Console.WriteLine ("Enter an integer : ");
                n = Convert.ToInt32 (Console.ReadLine ());
            } catch (Exception e) {
                Console.WriteLine (e.Message);
                b = false;
            } finally {
                Console.WriteLine (n);
            }
        } while(b == false);
    }
}

但是我解决了这个问题:

class MainClass
{
    public static void Main (string[] args)
    {
        int n= 0;
        bool b;
        do {
            try {
                b = true;
                Console.WriteLine ("Enter an integer : ");
                n = Convert.ToInt32 (Console.ReadLine ());
            } catch (Exception e) {
                Console.WriteLine (e.Message);
                b = false;
            } finally {
                Console.WriteLine (n);
            }
        } while(b == false);
    }
}

有人可以解释吗?

2 个答案:

答案 0 :(得分:4)

如果用户未输入正确的输入, b 变量将永远被永久错误地捕获。因此,在每个循环的开始,都需要将布尔变量设置为“ true”,这是其默认值。那是因为每次迭代都应是用户输入整数的新尝试。

答案 1 :(得分:2)

您只需使用int.TryParse即可轻松完成此操作,而无需使用try catch块

const colors = require('colors/safe');

您甚至可以不引入bool变量来进一步简化它

{
    "compilerOptions": {
        "allowSyntheticDefaultImports": true,
        "declaration": false,
        "lib": [
            "dom",
            "es2015",
        ],
        "module": "commonjs",
        "moduleResolution": "node",
        "target": "es6",
        "skipLibCheck": true,
        "stripInternal": true
    },
    "exclude": [
        "node_modules"
    ]
}