返回我的变量不是空实际上是什么意思?

6

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建议使用顶部代码。然而,我认为它的意思是如果user不为空,则返回user。但是该方法只接受bool类型的返回值,而不是类。

那么当user为null时,return user != null实际上返回什么?当user不为null时呢?

2个回答

9
所以,当user为null和非null时,return user != null实际返回什么呢?它只是对表达式进行评估。如果user为null,则返回false;如果user不为null,则返回true。可以把这看作是将比较结果分配给本地变量,然后再返回它的过程:
bool isNotNull = user != null;
return isNotNull;

或者:

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

isNotNull只有在user变量不为空时才为真。

从语义上讲,它与您的if-else语句是相同的。


在适当的情境下,这个表达式可以非常有效。 - Krythic

4

我不确定我在这里能为您提供任何帮助,@Yuval的答案是正确和清晰的,但也许从以下方式阐述可以更好理解:

您正在考虑以类似以下方式解析代码:

(return user) (!= null)

也就是说,你看到了 "return user",并且想知道该行剩余部分的作用。但是,return并不是这样工作的,它会评估剩余的行,并返回结果。它更像是

(return) (everything else)

或者,在具体情况下
(return) (user != null)

return语句最后执行。

这与运算符优先级很相似,比如3+5*2必须计算为3+10而不是8*2,因为*的优先级(必须首先计算)高于+return语句的优先级最低。

如果你能以此为依据去阅读和编写代码,你会发现自己能欣赏到重构后的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接