【发布时间】:2010-03-26 20:14:00
【问题描述】:
我有一个包装列表的类
我有通过索引方法获取值:
public RenderedImageInfo GetValue(int index)
{
list[index].LastRetrieved = DateTime.Now;
return list[index];
}
如果用户请求的索引超出范围,这将抛出 ArgumentOutOfRangeException 。
我应该让这种情况发生还是检查一下并自己扔掉?即
public RenderedImageInfo GetValue(int index)
{
if (index >= list.Count)
{
throw new ArgumentOutOfRangeException("index");
}
list[index].LastRetrieved = DateTime.Now;
return list[index];
}
在第一个场景中,用户会从内部列表中获得一个异常,这打破了我的 OOP 目标,即用户不需要了解底层对象。
但在第二种情况下,我感觉好像我在添加冗余代码。
编辑:
现在我想起来了,第三种情况呢,我捕获内部异常,修改它,然后重新抛出它?
【问题讨论】:
-
我强烈建议您反对您的第三种情况。
-
@TrueWill,你能说明原因吗?
-
不好修改现有的异常 - 这真的会是意想不到的行为(更不用说没有反射是不可能的,因为 ParamName 没有属性设置器):msdn.microsoft.com/en-us/library/…
-
您可以合法地对异常进行的唯一“修改”是 (a) 包装它,(b) 使用异常上的 .Data 属性将附加信息传递到调用堆栈。
标签: c# .net exception exception-handling