c#异常问题

时间:2012-01-12 09:40:47

标签: c# exception custom-exceptions

谢谢大家的帮助。

当除数为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";
    }
}

3 个答案:

答案 0 :(得分:4)

您在ExceptOne异常的构造函数中抛出异常。因此永远不会创建ExceptOne对象,也不会触发该异常的catch。

修改

可以在构造函数中抛出异常。请参阅:http://bytes.com/topic/c-sharp/answers/518251-throwing-exception-constructorWhen 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”设置)),因为永远不会捕获该异常。