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