【发布时间】:2013-09-09 09:13:14
【问题描述】:
假设一个简单的示例,其中方法检索一个集合(例如包含一些配置字符串的列表)并尝试以某种方式检查它:
void Init()
{
XmlDocument config = new XmlDocument();
config.Load(someXml);
var list = config.SelectNodes("/root/strings/key"); // Normally, list should not be null or empty
if (list == null || list.Count == 0)
throw new SomeExceptionType(message); // What kind of exception to throw?
// Iterate list and process/examine its elements
foreach (var e in list) ...
}
在此特定实例中,如果没有检索到任何内容,该方法将无法正常继续。我不确定在这种情况下要抛出什么异常类型。据我所知,我的选择是:
手动抛出任何东西,让
NullReferenceException被抛出 自动(不处理空列表情况),throw 自定义异常类型(可能不是一个好主意,因为我预计调用者不会尝试对异常执行任何操作, 即他不会寻找特定的异常类型来处理),
- 做点别的吗?
【问题讨论】:
-
/root/strings/key是修复还是变量?然后我会使用ArgumentException或使用自定义异常类型。 -
它是固定的,但
ArgumentException不应该只用于提供给方法的无效参数的上下文中(在这种情况下,根本没有参数)? -
如果源是一个属性,你可以抛出一个
ArgumentException,因为setter的参数无效,因此value是无效的。
标签: c# exception-handling