[英]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.