以下代码应引发异常以防止添加重复的集合项。
ICollection<T> collection = new List<T>();
public void Add(T item)
{
if (collection.Contain(item))
{
throw new SomeExceptionType()
}
collection.Add(item);
}
什么标准异常类型最合适?
以下代码应引发异常以防止添加重复的集合项。
ICollection<T> collection = new List<T>();
public void Add(T item)
{
if (collection.Contain(item))
{
throw new SomeExceptionType()
}
collection.Add(item);
}
什么标准异常类型最合适?
好吧,如果这样的密钥已经存在,就会Dictionary<,>.Add()
抛出ArgumentException
,所以我想这可能是一个先例。
Linq 使用了另外两个异常DuplicateNameException和DuplicateKeyException如果您使用的是 system.data 程序集,您可以使用它们。
ArgumentException可能是最好的。这是参数无效时引发的异常。
我会使用InvalidOperationException
:
当方法调用对于对象的当前状态无效时引发的异常。
由于参数值的有效性取决于对象的状态(即是否collection.Contains(item)
为真),我认为这是最好的例外。
确保向异常添加一条好的消息,让调用者清楚地知道问题所在。
ArgumentException 将是正确的异常(字典也使用该异常)
System.ArgumentException
我会说InvalidOperationException
,因为添加集合中已经存在的对象是无效的
我会抛出一个 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);
}