[英]What way is better to use exceptions?
我有两种创建异常的方法。
第一种方式:我使用基本Exception类创建异常。
public class Class1
{
public void Method1()
{
try
{
Method1ThrowException();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
public void Method1ThrowException()
{
throw new Exception();
}
}
第二种方式:通过这种方式,我创建了用户定义的异常类,然后使用该类创建异常。
public class Class2
{
public void Method2()
{
try
{
Method2ThrowException();
}
catch (MethodException e)
{
Console.WriteLine(e);
}
}
public void Method2ThrowException()
{
throw new MethodException();
}
}
public class MethodException : Exception
{
public MethodException()
{
}
public MethodException(string message) : base(message)
{
}
public MethodException(string message, Exception inner) : base(message, inner)
{
}
}
这种使用异常的方式有什么区别?
我读到使用第二种方法更好,但我不明白为什么? 在这两种方式中,我只是创建异常并获取它们。
第二种方法更好,因为您可以创建适合特定情况的自己的异常类型。 例如:您可以在编写通过某些网络进行通信的应用程序时创建ConnectionBrokenException类型,并在连接断开时抛出该类型。
这给您两个主要优点:
第一
您可以使用try..catch块根据异常类型以不同方式处理异常。 您可以决定向用户显示消息,回滚某些操作或执行其他操作。
try
{
... code throwing ConnectionBrokenException
}
catch(ConnectionBrokenException ex)
{
_logger.LogError("Something bad has happened with connection", ex.Message);
}
catch(Exception)
{
// handles other types of exceptions
}
第二
在分析来自此类应用程序的日志时,如果每种不良情况都有其自己的异常,则更容易诊断出一些问题。 例如,您可以使用一些过滤来仅查找您感兴趣的异常。
因为catch (Exception e)
捕获了所有内容 。 无法区分引发了哪种异常。 因此,细粒度的错误类是好的。
(另外,为什么定义Method1ThrowException
,而不是只throw
荷兰国际集团需要的地方抛出的异常?这只是增加了一个无用的层堆栈跟踪。)
没有“更好”的方法,这取决于您的特定需求。
如果可以使用现有的异常类型,则只需使用该异常类型( ArgumentException
等)。 请参阅此处以获取列表。
如果需要特殊的异常类型,请创建自己的包含异常的自定义属性。 例:
public BusinessException : Exception
{
public BusinessException(string reason)
{
Reason = reason;
}
public string Reason {get; set;}
}
如果要将它们扔到WCF服务中,请确保添加全局异常处理程序以将这些异常映射到WCF故障。 如果是Web API,请将其映射为HTML状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.