Что корректное исключение.NET должно бросить когда попытка вставить дублирующийся объект в набор?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
6
задан mattruma 10 September 2008 в 17:35
поделиться

5 ответов

Из руководства по проектированию Библиотеки классов для ошибок (http://msdn.microsoft.com/en-us/library/8ey5ey87 (По сравнению с 71) .aspx):

В большинстве случаев используйте предопределенные типы исключительной ситуации. Только определите новые типы исключительной ситуации для программных сценариев, где Вы ожидаете, что пользователи Вашей библиотеки классов поймают исключения этого нового типа и выполнят программное действие на основе самого типа исключительной ситуации. Это вместо парсинга строки исключения, которая негативно повлияла бы на производительность и обслуживание.

...

Бросьте ArgumentException или создайте исключение, полученное из этого класса, если недопустимые параметры передаются или обнаруживаются.

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

Это кажется, что "Объект указывает недопустимый" сценарий мне, таким образом, я выбрал бы InvalidOperationException по ArgumentException: параметры допустимы, но не в этой точке в жизни объектов.

5
ответ дан 8 December 2019 в 02:47
поделиться

.NET бросит Систему. ArgumentException, при попытке добавить объект к хеш-таблице дважды с тем же значением ключа, таким образом, он не похож, существует что-либо более определенное. Можно хотеть записать собственное исключение при необходимости в чем-то более определенном.

9
ответ дан 8 December 2019 в 02:47
поделиться

Почему имеет InvalidOperationException принятый как ответ?! Это должно быть ArgumentException?!

InvalidOperationException должен использоваться, если объект, называя метод/свойство против него не может справиться с запросом из-за состояния uninit'ed и т.д. Проблемой здесь не является объект, Добавляемый к, но объект, передаваемый объекту (это - простофиля). Думайте об этом, если это Добавляет, что вызов никогда не происходил, был бы объект все еще функционировать как нормальный, ДА!

Это должно быть ArgumentException.

13
ответ дан 8 December 2019 в 02:47
поделиться

Необходимо, вероятно, бросить ArgumentException, как, именно это делают основные классы библиотеки.

5
ответ дан 8 December 2019 в 02:47
поделиться

Ну, если Вы действительно хотите набор с уникальными объектами, Вы могли бы хотеть смотреть на объект HashSet (доступный в C# 3.0).

Иначе существует два подхода, которые можно проявить:

  • Создайте пользовательское исключение для своей операции, как Вы заявили
  • Реализуйте Добавление () метод, который возвращает булев результат: верный, если объект добавляется и ложь, если объект уже имеет дубликат в наборе

Любой подход можно считать лучшей практикой, пока Вы последовательны в ее использовании.

1
ответ дан 8 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

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