什么时候适合使用ThrowHelper方法而不是直接抛出?
void MyMethod() {
...
//throw new ArgumentNullException("paramName");
ThrowArgumentNullException("paramName");
...
}
void ThrowArgumentNullException(string paramName) {
throw new ArgumentNullException(paramName);
}
我读过调用ThrowHelper方法(唯一目的是抛出异常的方法)而不是直接抛出应该产生更小的字节码。
这一点,以及明显的封装(另一层间接),可能是不直接抛出的好理由,至少在某些情况下是这样。
无论如何,IMO 的缺点也不是微不足道的。
- (异常)控制流的一部分被隐藏了
- 异常最终有一个更神秘的堆栈跟踪
- 编译器(2.0)将无法识别ThrowHelper调用是方法的退出点,因此需要一些代码周围。
我有限的经验是,整体设计通常会变得更糟。
int MyMethod(int i) {
switch (i) {
case 1:
return 1;
default:
ThrowMyException();
}
return 0; // Unreachable (but needed) code
}
这可能部分是个人品味的问题。无论如何,您对这个问题的个人指导方针是什么?您是否发现将ThrowHelpers用于方法参数验证等所有常见任务(ThrowArgumentNullException(paramName)等)是一个好主意?我在这个问题上遗漏了一些明显的东西吗?
顺便说一句,我试图不将此问题与验证问题混为一谈,例如:
ThrowIfNameIsNullOrEmpty(name);