Использование «is object» вместо «!= null» или Object.ReferenceEquals() [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Использование «is object» вместо «!= null» или Object.ReferenceEquals() [закрыто]

Сообщение Anonymous »

Меня всегда беспокоило то, что в C# нет специального оператора равенства ссылок, который нельзя было бы перегрузить. Чтобы проверить, является ли ссылка нулевой, я хочу написать такой код:

Код: Выделить всё

if (thing == null)
Но всегда возникает мучительная мысль: «А что, если класс перегрузил оператор ==?». Меня не интересует, считает ли класс объект эквивалентным нулю. Меня интересует, является ли объект ссылка нулевым. Альтернативы, похоже, приводят к объекту:

Код: Выделить всё

if ((object)thing == null)
и Object.ReferenceEquals():

Код: Выделить всё

if (Object.ReferenceEquals(thing, null)) // long form
if (ReferenceEquals(thing, null)) // short form
Но недавно я писал такой код:

Код: Выделить всё

if (thing is object) // thing != null
if (!(thing is object)) // thing == null
Я читаю это как «если вещь является объектом», то есть что ей присвоен объект. Я понимаю, что это не цель оператора "is", но он проверяет наличие нулевых ссылок и всех типов ссылок, наследуемых от объекта, так что... почему бы и нет?
Я нашел что, по крайней мере, для меня такой код более читабелен и его гораздо удобнее печатать, тем более что утвердительный регистр (вещь является объектом) встречается в моем коде гораздо чаще, чем отрицательный регистр (!(вещь является объектом)).
Итак, мой вопрос: есть ли какие-нибудь подводные камни или крайние случаи, о которых я не знаю? Считается ли это плохой практикой или неэффективным? Это сбивает с толку? Почему я никогда не вижу такого кода?

Подробнее здесь: https://stackoverflow.com/questions/466 ... enceequals
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»