繁体   English   中英

返回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建议使用顶级代码。 但是,如果它不是null,那我认为是返回用户。 但该方法只接受bool返回而不是类。

那么返回user!= null实际上返回的是null,当它不是?

那么return user != null实际上返回的是null,当它不是时

它只是评估表达式。 如果user为null,则返回false ,如果user不为null,则返回true

您可以将此视为将比较结果分配给局部变量,然后再将其返回:

bool isNotNull = user != null;
return isNotNull;

要么:

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

仅当user变量不为null时, isNotNull才为true。

从语义上讲,它与if-else语句完全相同。

不确定我在这里添加任何值,@ Yuval的答案是正确和清晰的,但也许这样看是有帮助的。

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

(return user) (!= null)

也就是说,你会看到“返回用户”并想知道该行的其余部分在做什么。 但是return并不是那样的。 它评估该行的其余部分,并返回该行。 它更像是

(return) (everything else)

或者,在具体情况下

(return) (user != null)

最后执行return地方。

它非常类似于运算符优先级,其中3 + 5 * 2必须被评估为3 + 10而不是8 * 2,因为*具有比+更高的优先级(必须首先评估)。 return的优先级最低。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM