【问题标题】:Try statement doesn't always run? [duplicate]尝试语句并不总是运行? [复制]
【发布时间】:2022-01-25 02:48:01
【问题描述】:

我在运行下面的代码时遇到错误“使用未分配的变量'尝试'”,我不明白原因,因为据我了解,try 语句块总是运行,所以变量应该由用户?还是我错了?如果有人有我修复或解决它会有所帮助。

static void MagicNumber(int rndMin, int rndMax, int lives = 4)
{
    Random rnd = new Random();
    int rndNum = rnd.Next(rndMin, rndMax);
    int attempt;
    do
    {
        try
        {
            Console.WriteLine($"Remaining lives : {lives}");
            Console.WriteLine($"Enter a number between {rndMin} and {rndMax} :");
            attempt = int.Parse(Console.ReadLine());

        }
        catch
        {
            Console.WriteLine("Error : Enter a number !");
        }
    } while ((lives > 0) || (attempt < rndMin) || (attempt > rndMax));
}

MagicNumber(1, 40, 5);

【问题讨论】:

  • 如果Console.WriteLine 抛出异常会怎样?
  • 可能是 Console.Readline 在尝试变量分配之前抛出异常。
  • @Eduardomacedo 这是编译时错误,而不是运行时错误。它是为 while 子句中的 attempt 变量抛出的。
  • @gunr2171 哦!是的,你是对的。

标签: c#


【解决方案1】:

如果在您的try 块中引发异常,变量attempt 将不会被分配值,因此在您的while 中进行评估时将被取消分配。两种可能的解决方案是:

  1. 声明时将其初始化为默认值。
  2. 在您的 catch 块中为其分配一些值。

任何一个都应该工作。

【讨论】:

  • 谢谢你,我试过你的第二个建议,它奏效了!
【解决方案2】:

在为attempt 设置值之前,可能会在try 块中引发异常。您处理异常,以便在分配值之前引用 attempt

最佳做法是始终为变量分配初始值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    相关资源
    最近更新 更多