【发布时间】:2015-04-06 07:23:53
【问题描述】:
您认为捕获异常并重新抛出它是一种好习惯吗?
基本上我有一段代码,其中颜色是使用其构造函数和 3 个参数创建的。并且颜色构造函数可能会抛出异常。
public PointExtend(double x, double y, int r, int g, int b)
: base(x, y)
{
try
{
var color = new Color(r, g, b);
Color = color;
}
catch (InvalidColorValueException)
{
throw;
}
}
Resharper 说,catch-throw 子句是多余的,我同意,考虑到我没有对 Exception 做任何事情,而是再次抛出它,如果我没有,它无论如何都会泄漏到 UI,但这段代码不是用于一个更容易阅读的程序员,所以如果他创建 PointExtend 他就会知道代码可能会抛出什么?
【问题讨论】:
-
我认为这是毫无意义的,除非您抛出自定义异常
-
catch/throw是多余的。这相当于根本没有抓到。这不是更简洁的代码,这是一个意外的惊喜和令人头疼的尝试,试图理解作者的意思以及代码中是否缺少某些东西 -
良好实践是什么意思?你想达到什么目的?
-
@PanagiotisKanavos Petar 提到了 Comments,npinti 提到了上面的 ///summary 函数,我完全忘记了。我认为他们的想法实际上是有效的,并且会从现在开始选择我自己的方式,而不是重新抛出异常。
-
@ErnodeWeerd 我试图让程序员更容易阅读代码。程序员看到,这个 PointExtend 构造函数可能会抛出异常,所以如果他想在其他地方使用 PointExtend 构造函数,他将不得不捕获可能抛出的 InvalidColorValueException。但我现在发现这样做不是最好的主意,使用 cmets 或 ///summary 更受欢迎。