返回myVar!= null实际上是什么意思?

时间:2015-11-19 12:17:30

标签: c# refactoring resharper return-type

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返回而不是类。

那么返回用户!= null实际上返回什么时它是null而不是什么时候?

2 个答案:

答案 0 :(得分:7)

  

那么当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语句相同。

答案 1 :(得分:3)

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

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

(return user) (!= null)

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

(return) (everything else)

或者,在特定情况下

(return) (user != null)

最后执行return

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

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