有没有办法覆盖异常的消息?
我不想创建自定义异常,而是覆盖现有异常的消息.
例如:每次ArgumentOutOfRangeException抛出a时,我都希望它包含我的消息而不是默认消息.
可能吗?
对于你要抛出的异常,你可以将消息传递给构造函数:
throw new ArgumentOutOfRangeException("name", "My custom message");
Run Code Online (Sandbox Code Playgroud)
请注意,此处name是导致问题的参数的名称.在C#6中,您应该使用nameof运算符来实现这种重构安全:
public void Foo(int x)
{
if (x > 10)
{
throw new ArgumentOutOfRangeException(nameof(x), "That's too big");
}
}
Run Code Online (Sandbox Code Playgroud)
您无法修改其他代码抛出的异常消息,但您可以捕获异常并重新抛出另一个异常:
try
{
...
}
catch (FooException e)
{
// Keep the original exception
throw new BarException("Some message", e);
}
Run Code Online (Sandbox Code Playgroud)
我会尽量避免这样做太多.如果您正在考虑向用户显示异常消息,我通常会回避这一点 - 他们真的是针对开发人员.例如,ArgumentOutOfRangeException您建议的通常应该在代码中指出错误而不是某些外部条件(如网络故障或其他) - 用户无法对该错误做任何事情; 这是你应该解决的问题.网络故障或类似的事情对于用户采取行动至少更合理,但坦率地说,通常不会清楚事件链是什么.
| 归档时间: |
|
| 查看次数: |
5743 次 |
| 最近记录: |