以下代码应抛出异常以防止添加重复的集合项。
ICollection<T> collection = new List<T>();
public void Add(T item)
{
if (collection.Contain(item))
{
throw new SomeExceptionType()
}
collection.Add(item);
}
哪种标准异常类型最合适?
答案 0 :(得分:32)
好吧,如果此类密钥已经存在,Dictionary<,>.Add()
会抛出ArgumentException
,所以我想这可能是一个先例。
答案 1 :(得分:5)
ArgumentException可能是最好的。这是参数无效时抛出的异常。
答案 2 :(得分:3)
我会使用InvalidOperationException
:
a时抛出的异常 方法调用无效 对象的当前状态。
由于参数值的有效性取决于对象的状态(即collection.Contains(item)
是否为真),我认为这是最好的例外。
确保向异常添加一条好消息,以便明确调用者遇到的问题。
答案 3 :(得分:3)
Linq使用另外两个例外 DuplicateNameException 和 DuplicateKeyException 如果您使用的是system.data程序集,则可以使用这些例外。
答案 4 :(得分:2)
ArgumentException将是正确的异常(Dictionary也使用该异常)
答案 5 :(得分:1)
System.ArgumentException
答案 6 :(得分:1)
我会抛出一个ArgumentException。这就是通用System.Collections.Generic.SortedList<>
在其Add
方法中的作用。
从.NET Framework 2.0代码:
public void Add(TKey key, TValue value)
{
if (key == null)
{
System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument.key);
}
int num = Array.BinarySearch<TKey>(this.keys, 0, this._size, key, this.comparer);
if (num >= 0)
{
System.ThrowHelper.ThrowArgumentException(System.ExceptionResource.Argument_AddingDuplicate);
}
this.Insert(~num, key, value);
}
答案 7 :(得分:0)
我会说InvalidOperationException
,因为添加已经在集合中的对象无效