2015-07-18 6 views
-2

Я хотел проверить, существует ли пользователь в базе данных или нет, и я беру объект User и проверяю, является ли он нулевым или нет. Но проблема в моем коде, если пользователь не существует в наша база данных возвращает следующее исключение,Проверить объект null или нет

ссылка на объект не указывает на экземпляр объекта.

Я знаю, что эта ошибка происходит, когда нет такого пользователя в нашем database.So .. я хотел бы знать, если этому пользователь объект (я хочу вернуть нуль или нет) нуля или нет.

Моя часть Кодекса

if(newsManager.GetUserUsingEmail(User.Email).Email != null) //If user doesn't exists this come the above mentioned exception 
    { 
     //User Exists 
    } 
    else 
    { 
     //User Doesn't exists 
    } 

Как решить эту проблему?

+2

должен быть 'newsManager.GetUserUsingEmail (User.Email) = null' –

+0

! Неужели нам действительно нужно четыре ответа на все, говоря по существу то же самое? – MickyD

+0

@ MickyDuncan Мой ответ был первым, но я думаю, что, по крайней мере, один из других, должно быть, был запущен до моего опубликования. – christophano

ответ

3

Исключением из-за нулевой ссылки является, вероятно, из-за попытки доступа к свойству Email на пользователя, возвращаемого из метода GetUserUsingEmail. Вы должны проверить, имеет ли первое значение значение null, и только затем попытайтесь получить доступ к свойствам на нем.

var user = newsManager.GetUserUsingEmail(User.Email); 
if (user != null) 
{ 
    // user exists 
} 
else 
{ 
    // user does not exist 
} 
+0

Я думаю, что это лучшая структура кода ответов, в которых выражение 'GetUserUsingEmail()' не повторяется. – MickyD

0

если newsManager.GetUserUsingEmail(User.Email) возвращает null, то вы согласитесь, что попытка вызвать .Email должен дать вам ошибку Object reference not set to an instance of an object., верно?

Как указывается в комментариях, если ваше состояние действительно просто проверить, чтобы увидеть, если пользователь существует или нет, то просто это сделать:

if(newsManager.GetUserUsingEmail(User.Email) != null) //If user doesn't exists this come the above mentioned exception 
{ 
    //User Exists 
} 
else 
{ 
    //User Doesn't exists 
} 

Если, как ваш код предполагает, ваши намерения действительно введите if блок, только если у вас есть действительная Email значение для действительного пользователя, то вы можете сделать это, как это вместо:

var user = newsManager.GetUserUsingEmail(User.Email); 
if(user != null && !string.IsNullOrEmpty(user.Email)) 
{ 
    //User Exists and has a valid email 
} 
else 
{ 
    //User Doesn't exists or doesn't have a valid email. 
} 
0

вы не можете получить собственность от нулевой. Проверьте объект = нуль вместо:

if(newsManager.GetUserUsingEmail(User.Email) != null) //If user doesn't exists this come the above mentioned exception 
    { 
     //User Exists 
    } 
    else 
    { 
     //User Doesn't exists 
    } 

В C# 6.0 вы можете использовать Безопасный навигации оператора (?.):

if(newsManager.GetUserUsingEmail(User.Email)?.Email != null) //If user doesn't exists this come the above mentioned exception 
    { 
     //User Exists 
    } 
    else 
    { 
     //User Doesn't exists 
    }