Ну, я бы просто использовал ==
(если вы пытаетесь избежать пользовательского оператора равенства, возможно, приведите к object
- это все равно будет nop)
Кроме того, мои деньги будут идти с object.ReferenceEquals(obj, null)
, но вы также можете использовать object.Equals(obj, null)
, поскольку он обрабатывает null
и т. Д.
Для полноты: зачем мне просто использовать ==
/ !=
? Просто: компилятор может сделать это напрямую . IL для нулевой проверки объекта на самом деле:
- загрузить ссылку
- ответвление, если true (или ответвление, если false)
Вот и все. Две инструкции IL. Он даже не выполняет «проверку загрузки на нулевое значение, равенство» - поскольку определение «истина» - это «все, что не равно 0 / пусто», а «ложь» - «0 / пусто».
Для чего-то вроде ReferenceEquals
, то есть:
- загрузить ссылку
- загрузить ноль
- вызов метода
- (который создает фрейм стека)
- загрузить первый аргумент
- загрузить второй аргумент
- сделать проверку на равенство
- (затем передает значение обратно в кадр стека, возвращая true / false)
- ответвление, если true (или ответвление, если false)
Я знаю, какой я предпочитаю ...