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

Вы можете сделать это, используя group by

select number, class,
sum(unix_timestamp(date1) - unix_timestamp(date2)) as class_time
from myTable
group by number,class;
26
задан Jay 23 January 2019 в 15:15
поделиться

8 ответов

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

34
ответ дан 28 November 2019 в 07:00
поделиться

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

4
ответ дан amarnath chatterjee 28 November 2019 в 07:00
поделиться

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

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

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

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

3
ответ дан 28 November 2019 в 07:00
поделиться

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

3
ответ дан 28 November 2019 в 07:00
поделиться
System.ArgumentException
1
ответ дан 28 November 2019 в 07:00
поделиться

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

6
ответ дан 28 November 2019 в 07:00
поделиться

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

1
ответ дан 28 November 2019 в 07:00
поделиться

Я бы выбросил исключение 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);
    }
1
ответ дан 28 November 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: