谢谢大家的帮助。
当除数为1时,此代码不会产生我期望的结果.ExceptOne的基类不会被调用,ExceptOne中的超链接不会显示。我错过了什么?!
控制台输出为:
输入除数
1
WriteLine异常1 ...
WriteLine异常2 ...
base ctor2
http:// exc2.com
最后的写作线
class Program
{
static void Main(string[] args)
{
try
{
byte y = 0;
byte x = 10;
Console.WriteLine("enter a divisor");
string s = (Console.ReadLine());
y = Convert.ToByte(s);
if (y == 1) throw new ExceptOne();
Console.WriteLine("result is {0}", x / y); ;
}
catch (System.DivideByZeroException e)
{
Console.WriteLine("exception occured {0}...", e.Message);
}
catch (ExceptOne p)
{
Console.WriteLine(p.Message +"\n"+ p.HelpLink);
}
catch (System.Exception r)
{
Console.WriteLine(r.Message + "\n" + r.HelpLink);
}
finally
{
Console.WriteLine("Writeline in finally ");
Console.ReadLine();
}
}
}
public class ExceptOne : System.Exception
{
public ExceptOne()
: base("base ctor 1 ")
{
this.HelpLink = "http://exc1.com";
Console.WriteLine("WriteLine exception 1...");
throw new Exception2();
}
}
public class Exception2 : System.Exception
{
public Exception2()
: base("base ctor2 ")
{
Console.WriteLine("WriteLine exception 2...");
this.HelpLink = "http://exc2.com";
}
}
答案 0 :(得分:4)
您在ExceptOne异常的构造函数中抛出异常。因此永远不会创建ExceptOne对象,也不会触发该异常的catch。
修改强>
可以在构造函数中抛出异常。请参阅:http://bytes.com/topic/c-sharp/answers/518251-throwing-exception-constructor和When is it right for a constructor to throw an exception?
答案 1 :(得分:1)
如果您在构造函数中引发ExceptOne
异常时发现新的Exception2
类型的异常未在Main(...)
方法中捕获,那么它会被捕获一般例外条款。
答案 2 :(得分:0)
这是因为你在ExceptOne中抛出Exception2导致Exception2被(System.Exception r)块在main方法中捕获。
调用ExceptOne的基础,从不显示消息(由base(“base ctor 1”设置)),因为永远不会捕获该异常。