【发布时间】:2009-12-15 00:24:00
【问题描述】:
我有以下try-catch 语句,如果消息属性在文本中包含“我的错误”,我不想不抛出异常。
如何以编程方式完成此操作?另外,这会被认为是代码异味吗?
try
{
}
catch(Exception e)
{
if(e.Messages.Contains("My error"))
{
//want to display a friendly message and suppress the exception
}
else
{
throw e;
}
}
【问题讨论】:
-
这是一种糟糕的代码气味。如果您出于某种原因不得不使用框架,那只会引发与您的代码相同类型的异常。但请注意,写
throw e;还是只写throw;是有区别的(通常你会想要后者)。 -
这很难闻的另一个原因:这种技术会阻止您将错误字符串本地化为其他语言。或者,如果您正在寻找其他人的错误字符串,他们可能会在下一个版本中更改该字符串,或者如果他们检测到用户是法国人,则使用不同的字符串,等等。
-
是的,这实际上可能比前同事在一个重线程 Java 应用程序中将我所有的
catch (Exception e)替换为catch (Throwable t)更糟糕。 -
@Eric 我曾经通过本地化正在搜索的字符串来做到这一点。仍然不是一个好主意。
-
应该只是
throw;,从不throw e;。
标签: c# exception exception-handling try-catch