为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
德玛西亚99 2022-09-04 16:22:53
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”在当前上下文中不存在?
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

因为本地的作用域是第一个 try-catch 块。它是在块内部创建的,当块完成执行时,它将“消失”(超出范围)。a


您可以通过声明块外部来修复它,因此:a


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

double a;

try

{

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

}

...


查看完整回答
反对 回复 2022-09-04
?
BIG阳

TA贡献1859条经验 获得超6个赞

每对 {} 都会打开一个新作用域。因此,由于您为每个 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. ");

}


查看完整回答
反对 回复 2022-09-04
  • 2 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号