2015-11-19 3 views
4

Resharper - отличный инструмент, но иногда меня смущает то, что на самом деле означает предлагаемый код. У меня есть этот код:Что возвращает myVar! = Null на самом деле означает?

private bool DoesUserExists() 
{ 
    var user = De.Users.FirstOrDefault(u => u.Username == CurrentUser.Username); 
    return user != null; 
} 

Я первоначально имел:

if(user == null) 
    return false; 
else 
    return true; 

Но Resharper предложил верхний код. Тем не менее, мне кажется, что я говорю о возврате пользователя, если он не является нулевым. Но метод принимает только возврат bool, а не класс.

Так что же возвращает пользователь! = Null на самом деле возвращается, когда он равен нулю, а когда нет?

ответ

7

Так что же на самом деле return user != null вернуться, когда он является недействительным и , когда он не

Он просто оценивает выражение. Если user имеет значение null, он возвращает false, и если user не является нулевым, он возвращает true.

Думай об этом, как если бы вы назначая результат сравнения с локальной переменной, и только потом вернуть его:

bool isNotNull = user != null; 
return isNotNull; 

Или:

bool isNull = user == null; 
return !isNull; 

isNotNull было бы справедливо только тогда и только тогда переменная user не равна нулю.

Семантически, он идентичен вашему заявлению if-else.

+0

Хорошее объяснение - спасибо. –

+0

Это выражение может быть очень мощным в соответствующем контексте. – Krythic

3

Не уверен, что я добавляю здесь какую-либо ценность, ответ @ Yuval правильный и ясный, но, возможно, это помогает увидеть его таким образом.

Вы думаете о разборе кода что-то вроде этого:

(return user) (!= null) 

То есть, вы видите «возвращения пользователя» и интересно, что остальная часть строки делает. Но return не работает. Он оценивает остальную часть строки и возвращает ее. Это больше похоже на

(return) (everything else) 

или, в данном конкретном случае

(return) (user != null) 

return Где запускается на выполнение последней.

Это похоже на приоритет оператора, где 3 + 5 * 2 следует оценивать как 3 + 10 вместо 8 * 2, потому что * имеет более высокий приоритет (сначала должен быть оценен), чем +. return имеет самый низкий приоритет для всех.

Если вы научитесь читать и писать код с учетом этого, вы сможете оценить полученный код.

Смежные вопросы