Как определить, является ли ссылка на объект нулевой?

Как лучше всего определить, является ли ссылочная переменная объекта null?

Это следующее?

MyObject myObjVar = null;
if (myObjVar == null)
{
    // do stuff
}

person CJ7    schedule 17.08.2012    source источник
comment
Если вы хотите что-то по умолчанию, вы всегда можете сделать MyObject obj = myObjVar ?? DefaultObjVar   -  person Mohamed Nuur    schedule 17.08.2012


Ответы (5)


Да, вы правы, следующий фрагмент — это путь, если вы хотите выполнить произвольный код:

MyObject myObjVar; 
if (myObjVar == null) 
{ 
    // do stuff 
} 

Кстати: ваш код не будет компилироваться так, как сейчас, потому что доступ к myObjVar осуществляется до его инициализации.

person Daniel Hilgarth    schedule 17.08.2012

Вы можете использовать Object.ReferenceEquals

if (Object.ReferenceEquals(null, myObjVar)) 
{
   ....... 
} 

Это вернет true, если myObjVar имеет значение null.

person Mohan    schedule 17.08.2012
comment
Это полезно, если вы хотите переопределить оператор == для объекта. - person mac10688; 22.10.2015
comment
Если вам вдруг захочется проверить нулевое значение внутри вашей реализации ==, то я думаю, что Object.ReferenceEquals необходимо. - person bronzenose; 19.09.2020

То, как вы делаете, это лучший способ

if (myObjVar == null)
{
    // do stuff
}

но вы можете использовать оператор объединения с нулевым значением ?? для проверки, а также назначить что-либо

var obj  = myObjVar ?? new MyObject();
person Habib    schedule 17.08.2012
comment
Я думаю, что оператор объединения с нулевым значением был введен в C# 2. - person TheEvilPenguin; 17.08.2012

Вы можете:

MyObject myObjVar = MethodThatMayOrMayNotReturnNull();
if (if (Object.ReferenceEquals(null, myObjVar)) 
{
    // do stuff
}
person Habib Zare    schedule 17.08.2012
comment
зачем нужны два оператора if? - person Joshua Duxbury; 02.02.2016

В C# 7.0 вы можете использовать is null:

MyObject myObjVar = null;
if (myObjVar is null)
{
    // do stuff
}
person Misha Zaslavsky    schedule 14.07.2021