C# c例外问题
谢谢大家的帮助 当除数为1时,这段代码不会产生我所期望的结果。不会调用ExceptOne的基类,也不会显示ExceptOne中的超链接。我错过了什么 控制台输出为: 输入除数 1. 写入线异常1。。。 写入线异常2。。。 基础系数2 http://exc2.com 终于写进了C# c例外问题,c#,exception,custom-exceptions,C#,Exception,Custom Exceptions,谢谢大家的帮助 当除数为1时,这段代码不会产生我所期望的结果。不会调用ExceptOne的基类,也不会显示ExceptOne中的超链接。我错过了什么 控制台输出为: 输入除数 1. 写入线异常1。。。 写入线异常2。。。 基础系数2 http://exc2.com 终于写进了 您正在ExceptOne异常的构造函数中引发异常。因此永远不会创建ExceptOne对象,也不会触发该异常的捕获 编辑 可以在构造函数中抛出异常。请参阅:和如果您看到,当您在构造函数中引发ExceptOne异常时,您会抛出
您正在ExceptOne异常的构造函数中引发异常。因此永远不会创建ExceptOne对象,也不会触发该异常的捕获 编辑
可以在构造函数中抛出异常。请参阅:和如果您看到,当您在构造函数中引发ExceptOne异常时,您会抛出一个新的Exception2类型的异常,该异常未在主构造函数中捕获。。。方法,因此它会被捕获在general exception子句中。发生这种情况是因为您在ExceptOne中抛出Exception2,导致System.exception r块在主方法中捕获Exception2
调用ExceptOne的基,basebase ctor 1设置的消息永远不会显示,因为该异常永远不会被捕获。谢谢,刚刚学习了这些内容。然而,Writeline语句确实会在该构造函数中执行…当然,在这之后您会立即抛出异常。。。在构造函数中引发异常不会阻止代码在引发之前执行,但会阻止对象的创建。是;尝试注释抛出新异常2。。你为什么要写这个?我想我也想问的问题是,在构造函数中抛出异常是个坏主意,应该避免吗?完全有可能。见:和
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";
}
}