尝试将重复项添加到集合时应该抛出什么异常类型?

kla*_*har 26 .net c# exception duplicates

以下代码应抛出异常以防止添加重复的集合项.

ICollection<T> collection = new List<T>();

public void Add(T item)
{
    if (collection.Contain(item))
    {
          throw new SomeExceptionType()
    }

    collection.Add(item);
}
Run Code Online (Sandbox Code Playgroud)

什么标准异常类型最合适?

Pav*_*aev 34

好吧,如果这样的密钥已经存在则Dictionary<,>.Add()抛出ArgumentException,所以我想这可能是一个先例.


ama*_*jee 9

Linq 使用另外两个异常DuplicateNameExceptionDuplicateKeyException如果您使用 system.data 程序集,您可以使用它们。


Bra*_*don 6

ArgumentException可能是最好的.这是参数无效时抛出的异常.


And*_*are 5

我会用InvalidOperationException

当方法调用对于对象的当前状态无效时引发的异常。

由于参数值的有效性取决于对象的状态(即是否为collection.Contains(item)真),我认为这是最好的例外。

确保向异常添加一条明确的消息,让调用者清楚地了解问题所在。

  • 恕我直言,InvalidOperationException 会让用户感到困惑,因为它主要用于显示不适当的操作顺序。例如,从封闭式阅读器中阅读等。 (2认同)