【问题标题】:What does Return myVar != null actually mean?Return myVar != null 实际上是什么意思?
【发布时间】:2015-11-19 23:40:55
【问题描述】:

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 != null 到底是什么时候返回的,什么时候不是呢?

【问题讨论】:

    标签: c# refactoring resharper return-type


    【解决方案1】:

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

    它只是简单地计算表达式。如果user 为空,则返回false,如果user 不为空,则返回true

    把这个想象成你将比较的结果分配给一个局部变量,然后才返回它:

    bool isNotNull = user != null;
    return isNotNull;
    

    或者:

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

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

    在语义上,它与您的 if-else 语句相同。

    【讨论】:

    • 这个表达式在适当的上下文中可能非常有效。
    【解决方案2】:

    不确定我是否在此处添加任何价值,@Yuval 的答案是正确且清晰的,但也许以这种方式看待它会有所帮助。

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

    (return user) (!= null)
    

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

    (return) (everything else)
    

    或者,在特定情况下

    (return) (user != null)
    

    return 最后执行的位置。

    这很像运算符优先级,其中 3+5*2 必须计算为 3+10 而不是 8*2,因为 * 的优先级(必须首先计算)高于 +return 的优先级最低。

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

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2012-09-17
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2012-10-13
      • 2011-01-03
      • 2021-09-17
      相关资源
      最近更新 更多