gpt4 book ai didi

c# - 我应该抛出自己的 ArgumentOutOfRangeException 还是让一个气泡从下面向上冒?

转载 作者:可可西里 更新时间:2023-11-01 08:20:14 25 4
gpt4 key购买 nike

我有一个包装 List<>

的类

我有通过索引方法获取值:

    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 目标,即用户不需要了解底层对象。

但在第二种情况下,我觉得我好像在添加冗余代码。

编辑:
现在我想到了,第三种情况怎么样,我捕获内部异常,修改它,然后重新抛出它?

最佳答案

出于以下几个原因,您应该自己扔掉:

  1. 您可以显式设置 appropriate parameter name in the constructor .这样,异常就有了超出范围的 Argument 的适当参数信息。
  2. (次要)就您的用户而言,内部列表的异常将具有无效的堆栈跟踪。通过构造一个新的异常,您可以获得堆栈跟踪,显示您的方法是不合适的,这将更容易让您的用户进行调试。

至于捕获和修改内部异常——我不一定会推荐这样做。如果异常是额外信息可能有用的异常,则应使用 InnerException您的新异常(exception)传播此信息了。

在此示例中(ArgumentOutOfRangeException),存在内部列表的事实应作为实现细节保留,您的用户没有理由看到该信息。

关于c# - 我应该抛出自己的 ArgumentOutOfRangeException 还是让一个气泡从下面向上冒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com