无法访问的代码visual studio c#do while循环

时间:2013-09-06 06:32:44

标签: c# visual-studio-2012 do-while

我正在尝试编写代码(在visual studio 2012中使用c#),允许用户使用1,2,3或4选择一个帐户。我正在使用do-while循环,所以我可以使用0退出(中断?)或再次运行循环,直到选择了有效选项。

问题是,Visual studio告诉我代码validAccount = true;无法访问,并且不允许我对其进行测试。因为这个方法也应该返回一个值,我有一个"并非所有的代码路径都返回一个值"错误,我真的很困惑。这是我的代码:

    static int chooseAccount() {
        bool validAccount = false;
        do {
            Console.Clear();
            Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
            int inputNumber = int.Parse(Console.ReadLine()); //by declaring int inputNumber here we save having an extra line.
            if ((inputNumber >= 1) && (inputNumber <= 4)) {
                return inputNumber;
                validAccount = true;
            }
            else if (inputNumber == 0) {
                break;
            }
            else {
                Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
            }
        } while (!validAccount);
    }//end chooseAccount

也许我只是长时间盯着这看,并且看不到我犯过的那个简单的错误。如果这个问题已经解决,我欢迎有新的视角或指导我能找到解决方案的地方。 (它有点难以谷歌类似于&#34;无法访问的代码&#34;当代码必须如此具体......)

3 个答案:

答案 0 :(得分:1)

带有错误的行正好在return语句之后。你的代码在每一种情况下都会(并且编译器知道这一点)退出该行之前的函数,因此它永远不会到达下一行。

您不需要将validAccount设置为true来打破循环,因为return语句将退出该函数,因此会自动退出循环。

最后,如果您将validAccount设置为true然后返回,则其他任何功能都无法访问validAccount,那么为什么还需要将其设置为true呢?

事实上,您根本不需要validAccount,因为使用breakreturn语句,您已经控制了进出循环的方式。这将有效:

static int chooseAccount() {
    while(true) {
        Console.Clear();
        Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
        int inputNumber = int.Parse(Console.ReadLine());
        if ((inputNumber >= 0) && (inputNumber <= 4)) {
            return inputNumber;
        }
        else 
        {
            Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
        }
    }
}

答案 1 :(得分:0)

切换这两个:

return inputNumber;
validAccount = true;

答案 2 :(得分:0)

请注意,return声明会立即将您带出该功能。那么下一个validAccount = true;永远不会被执行!