猿问

名称“a”在当前上下文中不存在

Console.Write("type first number: ");

try

    Double a = Convert.ToDouble(Console.ReadLine());

}

catch (System.FormatException)

{

    Console.WriteLine("that's not a number");

}

Console.Write("operation: ");

string b = Console.ReadLine();

Console.Write("type second number: ");

try

    Double c = Convert.ToDouble(Console.ReadLine());

}

catch (System.FormatException)

{

    Console.WriteLine("that's not a number");

}

if (b == "+") 

{

    Double sum = a + c;

}

C#新手,为什么它说名称“a”在当前上下文中不存在?


德玛西亚99
浏览 140回答 2
2回答

森栏

因为本地的作用域是第一个 try-catch 块。它是在块内部创建的,当块完成执行时,它将“消失”(超出范围)。a您可以通过声明块外部来修复它,因此:aConsole.Write("type first number: ");double a;try{    a = Convert.ToDouble(Console.ReadLine());}...

BIG阳

每对 {} 都会打开一个新作用域。因此,由于您为每个 try 块打开了一个新作用域,因此变量 a 和 c 仅在该块中有效。试试这个:Double a = 0;try{    a = Convert.ToDouble(Console.ReadLine()); }catch (System.FormatException){    Console.WriteLine("that's not a number");}(在其他地方也是如此)。在这种特殊情况下,使用 TryParse() 通常是更简单、更好的解决方案,因为它不涉及异常:Double a;String input = Console.ReadLine();if (!Double.TryParse(input, out a)){     Console.WriteLine("That was not a number...");}甚至类似的东西(无论如何防止继续):Double a;do {    String input = Console.ReadLine();    if (Double.TryParse(input, out a))    {        break;     }    Console.WriteLine("That was not a number... Try again. ");}
随时随地看视频慕课网APP
我要回答