例外:何时使用、时间、总体使用

And*_*y M 1 .net c# exception overuse

我会试着问我的问题,所以它不会以一个简单的争论性线索结束。

我最近进入了一个用 C# 编码的应用程序,我发现了异常机制。我和他们有过一些不好的经历,例如以下

// _sValue is a string
try
{
    return float.Parse(_sValue);
}
catch
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我把它改成:

float l_fParsedValue = 0.0f;
if (float.TryParse(_sValue, out l_fParsedValue))
{
    return l_fParsedValue;
}
else
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果,我在 Visual Studio 中的输出不再充斥着类似的消息

第一次机会 System.FormatException blabla

当像“-”这样的字符串到达​​代码段时。我认为使用第二个片段更干净。

更进一步,我经常看到异常被过于频繁地使用 ilke:“我在这个 try-catch 中做我想做的任何事情,如果有什么问题,就抓住。”。

现在,为了不陷入糟糕的误解,我希望你们帮助我清楚地定义如何/何时使用这些异常,以及何时坚持使用老派的“if...else”。

在此先感谢您的帮助!

Cod*_*aos 5

您应该在特殊情况下抛出异常。即当意外发生时。如果您希望函数定期抛出异常,那么这很可能是糟糕的设计。

在您的示例中,很明显这TryParse更好,因为异常似乎经常发生。

但是例如在解析文件时,我希望它几乎总是有效的。所以我通常使用Parse并捕获异常并生成一个InvalidDataException将捕获的异常作为内部异常。通常会大量简化解析代码,即使它可能是糟糕的风格。

我推荐 Eric Lippers 的博客条目:Vexing exceptions