Return myVar != null 到底是什么意思?

What does Return myVar != null actually mean?

Resharper 是一个很棒的工具,但它有时会让我混淆建议代码的真正含义。我有这个代码:

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提示了最上面的代码。但是,在我看来,如果 return user 不为空,则它是在说。但是该方法只接受 bool return 而不是 class。

那么 return user != null 实际上 return 什么时候是 null 什么时候不是?

So what does return user != null actually return when it is null and when it is not

它只是计算表达式。如果 user 为空,则为 returns false,如果 user 不为空,则为 returns true.

将此视为将比较结果分配给局部变量,然后才返回它:

bool isNotNull = user != null;
return isNotNull;

或者:

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

isNotNull 仅当 user 变量不为空时才为真。

在语义上,它与您的 if-else 语句相同。

不确定我是否在此处添加任何值,@Yuval 的回答是正确和清晰的,但这样看可能会有所帮助。

您正在考虑像这样解析代码:

(return user) (!= null)

也就是说,您看到 "return user" 并想知道该行的其余部分在那里做什么。但是 return 不是这样的。它评估该行的其余部分,returns。更像是

(return) (everything else)

或者,在特定情况下

(return) (user != null)

其中 return 最后执行。

这很像运算符优先级,其中 3+5*2 必须计算为 3+10 而不是 8*2,因为 * 比 [=16 具有更高的优先级(必须先计算) =]. return 的优先级最低。

如果您在学习阅读和编写代码时考虑到这一点,您会发现自己很欣赏重构后的代码。