C# c例外问题

C# c例外问题,c#,exception,custom-exceptions,C#,Exception,Custom Exceptions,谢谢大家的帮助 当除数为1时,这段代码不会产生我所期望的结果。不会调用ExceptOne的基类,也不会显示ExceptOne中的超链接。我错过了什么 控制台输出为: 输入除数 1. 写入线异常1。。。 写入线异常2。。。 基础系数2 http://exc2.com 终于写进了 您正在ExceptOne异常的构造函数中引发异常。因此永远不会创建ExceptOne对象,也不会触发该异常的捕获 编辑 可以在构造函数中抛出异常。请参阅:和如果您看到,当您在构造函数中引发ExceptOne异常时,您会抛出

谢谢大家的帮助

当除数为1时,这段代码不会产生我所期望的结果。不会调用ExceptOne的基类,也不会显示ExceptOne中的超链接。我错过了什么

控制台输出为:

输入除数 1. 写入线异常1。。。 写入线异常2。。。 基础系数2 http://exc2.com 终于写进了


您正在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";
    }
}