C# 处理异常的问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 01:44:40
using System;
class Test

{
public static void Main()
{
double a=2, b=3, c;
try
{
c = Math.Sqrt(a * a - b * b);

}
catch
{
c = Math.Sqrt(b * b - a * a);

}
finally {
c = c + a;

}
Console.WriteLine("{0}", c);
}
}
为什么说 c = c + a; 当中的C 没有附值呢? 不是前面处理异常的时候给他附值了啊?
哦谢谢了~~

finally块就是一段独立的代码. 无论是try块还是catch块, 在离开前都会跳转去执行finally中的代码. 但是此时try和catch中的所有代码都已经执行完毕, 因此在运行finally时是不会对前面的结果造成任何影响的.也就是说Console.WriteLine("{0}", c); 在c = c + a; 之前执行

try
{
c = Math.Sqrt(a * a - b * b);
}
这里边a * a - b * b值是负数

Math.Sqrt(负数);
负数算出来的值是空的但不错
所以catch也没有执行

所以c=c+a中c没有附值!

晕掉,这问题LS两位还回答的有意义吗?
在C#里,c不给付值,是无法编译的

就算是c给定了一个值,因为
try
{
c = Math.Sqrt(a * a - b * b);
}

执行后c不是为空,而为NaN值,并没有产生异常
catch不会执行