IsNothing по сравнению с является ничем

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

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

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 ");
        }
    }
}
128
задан Uwe Keim 7 October 2019 в 03:59
поделиться

7 ответов

Если Вы будете смотреть на MSIL, поскольку он выполняется, Вы будете видеть, что он не компилирует вниз в тот же самый код. При использовании IsNothing (), он на самом деле звонит тому методу в противоположность просто оценке выражения.

причина я был бы склонен склоняться к использованию, "Ничто", когда я инвертирую его, становится "IsNot Ничто', а не "Не IsNothing (объект)", который я лично чувствую более читаемые взгляды.

123
ответ дан 24 November 2019 в 00:38
поделиться

Я нахожу, что Patrick Steele ответил на этот вопрос лучше всего на его блоге: Предотвращение IsNothing ()

я не скопировал ни одного его ответа здесь, для обеспечения кредита get's Patrick Steele на его сообщение. Но я действительно думаю, пытаетесь ли Вы решить, использовать ли, Ничто или IsNothing, необходимо прочитать его сообщение. Я думаю, что Вы согласитесь, что это - Ничто, лучший выбор.

Редактирование - комментарий VoteCoffe здесь

содержание статьи Partial: После рассмотрения большего количества кода я узнал другую причину, необходимо избежать этого: Это принимает типы значения! Очевидно, так как IsNothing () является функцией, которая принимает 'объект', можно передать что-либо, что Вы хотите к нему. Если это будет тип значения, то.NET втиснет его в объект и передаст его IsNothing - который будет всегда возвращать false на помещенном в коробку значении! Компилятор VB.NET проверит, ", Ничто" не разрабатывает синтаксис и не скомпилирует, при попытке сделать, "Ничто" на типе значения. Но IsNothing () функционируют компиляции без жалоб.-PSteele †“VoteCoffee

45
ответ дан 24 November 2019 в 00:38
поделиться

Я соглашаюсь с, "Ничто". Как указано выше легко Ничего не инвертировать с "IsNot".

я нахожу это легче читать...

If printDialog IsNot Nothing Then
    'blah
End If

, чем это...

If Not obj Is Nothing Then
    'blah
End If
29
ответ дан 24 November 2019 в 00:38
поделиться

VB полон вещей как эта попытка сделать его и "как английский язык" и удобный для людей, которые привыкли к языкам, которые используют () и {} много. Например, на "как английская "сторона... VB имеет" , Не " ключевое слово... и не, я не шучу. И с другой стороны, поскольку Вы уже, вероятно, знаете большую часть времени, что можно использовать () с вызовами функции, если Вы хотите, но не имеете к.

я предпочитаю IsNothing ()..., но я использую C и C#, таким образом, это, что удобно. И я думаю, что это более читаемо. Но пойдите с тем, что чувствует себя более комфортно Вам.

5
ответ дан 24 November 2019 в 00:38
поделиться

Я склоняюсь к, "Ничто" альтернатива, прежде всего, потому что это кажется большим количеством OO.

, Конечно, Visual Basic не , получил не ключевое слово.

5
ответ дан 24 November 2019 в 00:38
поделиться

Я также склонен использовать Ничего версия частично от использования его так же, как я делаю в SQL.

2
ответ дан 24 November 2019 в 00:38
поделиться

Я первоначально использовал IsNothing, но я двигал использование, Ничто в более новых проектах, главным образом для удобочитаемости. Единственное время, которое я продолжаю работать с IsNothing, - то, если я поддерживаю код, где это используется повсюду, и я хочу остаться последовательным.

1
ответ дан 24 November 2019 в 00:38
поделиться
Другие вопросы по тегам:

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