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
的优先级最低。
如果您在学习阅读和编写代码时考虑到这一点,您会发现自己很欣赏重构后的代码。
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
的优先级最低。
如果您在学习阅读和编写代码时考虑到这一点,您会发现自己很欣赏重构后的代码。