什么时候适合使用ThrowHelper而不是直接投掷?什么时候应该使用ThrowHelper方法而不是直接投掷?
void MyMethod() {
...
//throw new ArgumentNullException("paramName");
ThrowArgumentNullException("paramName");
...
}
void ThrowArgumentNullException(string paramName) {
throw new ArgumentNullException(paramName);
}
我读过,调用ThrowHelper方法(与抛出异常的唯一方法purpouse),而不是直接扔应该产生较小的字节码。
这个和明显的封装(另一个间接层)可能是不直接抛出的好理由,至少在某些场景中是这样。
无论如何,国际海事组织的弊端也不是非实质性的。
- 的(例外)控制流程被隐藏
- 异常的一部分最终具有更隐蔽栈跟踪
- 编译器(2.0)将无法识别ThrowHelper调用是出口点从一种方法,因此一些代码是必要的。
我有限的经验是,总体设计往往变得更糟。
int MyMethod(int i) {
switch (i) {
case 1:
return 1;
default:
ThrowMyException();
}
return 0; // Unreachable (but needed) code
}
这可能部分是个人品味的问题。无论如何,你对这个问题的个人指导方针是什么?你是否发现使用ThrowHelpers来执行所有常见任务,如方法参数验证(ThrowArgumentNullException(paramName)等)是一个好主意? 我在这个问题上错过了一些明显的东西吗?
btw我试图不要混淆这个问题与验证问题,例如,一种方法,如:
ThrowIfNameIsNullOrEmpty(name);
哇。我以前没有看到过这种模式,但是和我一样,我的直接反应非常消极。对绝大多数情况来说,字节码大小必定是不成熟的优化。 – bobince 2009-12-30 13:20:24
微软在设计Stack时使用ThrowHelper:http://pastebin.com/p2k4URtU –
2012-05-18 19:54:11