什么是正确的。净例外扔的时候试着插入一个重复的对象为一个集合?

StackOverflow https://stackoverflow.com/questions/54789

  •  09-06-2019
  •  | 
  •  

我有一个资产对象,有一个酒店AssignedSoftware,这是一种集合。

我想要确保相同的软件没有分配到的资产超过一次。在添加的方法我检查,看如果该软件已经存在,并且如果它不,我想要扔一个例外。

是否有一个标准。净外,我应该扔?或者最佳做法,决定创建我自己定义的例外?

有帮助吗?

解决方案

从这类图书馆的设计指导方针的错误(http://msdn.microsoft.com/en-us/library/8ey5ey87(VS。71).aspx):

在大多数情况下,使用预先定义的例外类型。只有定义新的例外类型的方案的情况,在你指望用户的类图书馆抓到的例外情况的这种新的类型和执行方案行动基础上的例外类型本身。这是替代分析异常串,这将产生负面影响表现和维护。

...

扔ArgumentException或者创建一个例外,来自这一类,如果无效的参数是通过检测。

扔InvalidOperationException例外,如果一个电话到酒店组访问或方法是不适宜的给予对象的当前状态。

这似乎是一个"对象国的无效"的情况给我,所以我会选InvalidOperationException过ArgumentException:的参数都是有效的,但不是在这一点上,在对象的生活。

其他提示

为什么 InvalidOperationException 被接受作为回答?!它应该是一个 ArgumentException?!

InvalidOperationException 应当使用,如果对象具有法/财产称为反对的它不能够应对要求由于uninit'ed状态等等。这里的问题是 不对象正在增加,但是对被传递给对象(这是一个欺骗). 想想看,如果添加这话从来没发生,就象仍然作为正常的,是的!

这应该是一个 ArgumentException.

.净将引发一系统。ArgumentException如果你尝试增加一个项目,以hashtable两次与同样关键的价值,因此它不像有什么更加具体。你可能想要写你自己的异常,如果你需要更具体的东西。

你也许应该扔ArgumentException,因为这是我的座图书馆的类做。

好吧,如果你真想要一个收集与独特的物品,你可能想看一看 对象。 (可在C#3.0).

否则,有两个办法可以采用:

  • 创建一个自定义的例外对于您的操作,只是因为你有说
  • 实现一个Add()方法,该方法返回布尔的结果:真的,如果该项目是加入和虚假的,如果该项目已经具有的重复,在收集

这两种方法可以被认为是最佳做法,只要你是一致的使用。

我一直很喜欢的InvalidOperationException.但是,你也可以创建一个自定义的例外,说的一DuplicateSoftwareAssignmentException.


从框架的设计准则:

"扔ArgumentException或创建 一个例外,来自这一类 如果无效传递的参数或 检测。

扔InvalidOperationException 异常如果一个电话到酒店 访问或方法是不合适的 鉴于目前的状态。"

目前的状态,包括参考其他类实例。在这种情况下,国家已经包括参照实例正在添加的,因此呼吁的方法是不适当的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top