捕获异常,验证输入或两者?

时间:2011-06-03 13:03:17

标签: c# .net exception-handling validation

我正在努力获取RSS源:

SyndicationFeed rss = SyndicationFeed.Load(XmlReader.Create(textBox1.Text));
在这种情况下,

XmlReader.Create()最多可以抛出4个与参数为null,404错误等相关的异常。

我应该在调用该行之前尝试验证Uri(确保它不是空的,404,正确的doctype等),还是应该只处理异常?我知道我已经多次阅读过异常应该用于真正特殊的情况,我同意这似乎不符合这个先决条件,但似乎更容易处理异常。

4 个答案:

答案 0 :(得分:4)

复选框的Text属性永远不会为空,因此您可以跳过该属性。手动检查所有简单且与流程无关的案例,例如字符串为空且Url正确,并在Create方法中为验证留下更加模糊的XML特定内容。所以答案是将两者结合起来。

另外,让我再次提及Eric Lippert关于例外情况的blog post。在你的情况下,可能会发生令人烦恼和外生的异常,所以你应该抓住它们。但要确保不会出现骨头病。

答案 1 :(得分:0)

由于阅读器和联合供稿解释器将验证输入,因此实际上不需要复制该功能。尤其如此,因为 - 要​​正确地这样做 - 你必须接受或拒绝完全相同的文件。这将是一个疯狂的代码重复。

我建议只处理异常。

答案 2 :(得分:0)

我期待看到其他人在这里说的话,但在我看来,你应该做你知道可以准确做的验证类型:检查空URI,检查一个完全空的URI,等等除此之外,让Create调用处理验证并捕获异常。我猜这个函数的编写者知道如何比你更彻底地验证它(没有冒犯的意图!)。

答案 3 :(得分:0)

虽然我不是最佳实践大师,但我确实认为异常应该是例外(是的......)这不仅是一种哲学的东西,它也是一种实用的东西。在大多数情况下,异常处理的性能成本高于检查异常原因。

我是否应该保持哲学,我会说“如果你无法解决这个问题,就不要试图解决它。”例如,如果要在文件中写入内容,检查文件是否存在,文件权限等可能会很麻烦,例如,如果您无法访问网络驱动器,则无法做很多事情。如果你发现了“验证文件是否存在以及你是否拥有适当的权限”的例外情况,那么你可以省去很多麻烦。