Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回自定义异常_C#_Exception - Fatal编程技术网

C# 返回自定义异常

C# 返回自定义异常,c#,exception,C#,Exception,我正试图用C#实现我自己的异常类。为此,我创建了一个从Exception派生的CustomException类 class CustomException : Exception { public CustomException() : base() { } public CustomException(string message) : base(message) { } public CustomException(string f

我正试图用C#实现我自己的异常类。为此,我创建了一个从Exception派生的CustomException类

class CustomException : Exception
{
    public CustomException()
        : base() { }

    public CustomException(string message)
        : base(message) { }

    public CustomException(string format, params object[] args)
        : base(string.Format(format, args)) { }

    public CustomException(string message, Exception innerException)
        : base(message, innerException) { }

    public CustomException(string format, Exception innerException, params object[] args)
        : base(string.Format(format, args), innerException) { }
}
然后我用它

static void Main(string[] args)
{
    try
    {
        var zero = 0;
        var s = 2 / zero;
    }
    catch (CustomException ex)
    {
        Console.Write("Exception");
        Console.ReadKey();
    }
}

我希望我会得到我的异常,但我得到的只是一个标准的dividebyzero异常。如何使用CustomException类捕获除零异常?谢谢。

您无法神奇地更改现有代码引发的异常类型

您需要
抛出
异常才能捕获它:

try 
{
   try
    {
        var zero = 0;
        var s = 2 / zero;
    }
    catch (DivideByZeroException ex)
    { 
        // catch and convert exception
        throw new CustomException("Divide by Zero!!!!");
    }
}
catch (CustomException ex)
{
    Console.Write("Exception");
    Console.ReadKey();
}

首先,如果您想看到自己的异常,您应该
在代码中的某个地方抛出它:

public static int DivideBy(this int x, int y)
{
    if (y == 0)
    {
        throw new CustomException("divide by zero");
    }

   return x/y; 

}
然后:


为什么.NET应该开始使用您的异常?好吧,即使我添加了抛出新异常以捕获部分,我也不会得到它。我将继续得到标准例外。我是否需要在CustomException中编写一些代码来捕获DeviceByzero异常?如果在div之前抛出0或使用Alexei的方法,则不应该这样做。顺便说一句:我认为除非你有很好的理由,否则替换异常是不好的做法。你可能想提一下,这样做是一个可怕的想法。@Wilbert哪一部分
2/zero
可能是获取非常特定异常(
((string)(null))的最简单的方法;当一些高级操作由于许多不同的异常之一而失败时,重新抛出不同的异常是相当标准的做法(
IOException
KeyNotFoundException
等可以作为
CustomerNotFoundException
重新抛出,可能是InnerException设置为该异常,也可能不是出于安全要求);希望很明显,嵌套的
try
/
catch
只是一个示例。是的,在这样的上下文中它是有意义的,但只是代码示例..嗯:)@AlexeiLevenkov为什么标准异常不需要throw关键字???@amimm-它们是由现有代码引发的。您需要手动抛出自定义异常的原因是,自定义异常在框架中没有挂钩(它们怎么可能?)。因此,您要么根据方法/函数中的某些逻辑抛出它们,要么抛出它们以代替本例中的标准异常。
int a = 5;
int b = 0;
try
{
      a.DivideBy(b);
}
catch(CustomException)
{
//....
}