Подтвердить что ты не робот

Какой тип исключения следует использовать при попытке добавить дубликаты в коллекцию?

Следующий код должен выдавать исключение, чтобы предотвратить добавление дублирующего элемента коллекции.

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

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

    collection.Add(item);
}

Какой стандартный тип исключения является наиболее подходящим?

4b9b3361

Ответ 1

Ну, Dictionary<,>.Add() throws ArgumentException, если такой ключ уже существует, поэтому я предполагаю, что это может быть прецедентом.

Ответ 2

ArgumentException, вероятно, будет лучшим. Это исключение, выдаваемое, когда аргумент недействителен.

Ответ 3

Linq использует еще два исключения DuplicateNameException и DuplicateKeyException, если вы используете сборку system.data.

Ответ 4

Я бы использовал InvalidOperationException:

Исключение, которое бросается, когда вызов метода недействителен для текущее состояние объекта.

Поскольку значение аргумента зависит от состояния объекта (то есть, истинно ли оно /t collection.Contains(item)), я считаю, что это лучшее исключение для использования.

Убедитесь, что вы добавили хорошее сообщение в исключение, которое дает понять, что проблема была с вызывающим.

Ответ 5

ArgumentException будет правильным исключением (словарь также использует это исключение)

Ответ 6

System.ArgumentException

Ответ 7

Я бы выбрал 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);
    }

Ответ 8

Я бы сказал InvalidOperationException, потому что недопустимо добавлять объект, уже находящийся в коллекции