【问题标题】:Checking if Parameter is Null [duplicate]检查参数是否为空[重复]
【发布时间】:2015-07-18 04:14:53
【问题描述】:

我正在尝试创建一个方法来确定我的id parameter 是否为空。如果 parameter 为空,那么它应该返回 true。如果id parameter 有值,那么它应该返回false。

这看起来相当简单,但我似乎无法让它发挥作用。

Resharper有2个备注:

  1. 表达式总是错误的
  2. 冗余条件三元表达式用法。

我的方法:

public bool IsPersonIdNull(int id)
{
    return id == null ? true : false;
}

【问题讨论】:

  • int 是一个结构。结构不能为空。
  • int 或 bool 不能为空(字符串等对象不是这种情况)。如果您希望 id 可以为空,请声明“int ? id”。
  • 第二条注释是因为表达式本身返回一个布尔值所以你不需要三元来选择真或假,不管intint?混淆。
  • 请在提问前尝试搜索错误消息作为调查的一部分。除了 C#/VS,微软还为此提供了搜索引擎:bing.com/search?q=Expression+is+always+falsebing.com/…

标签: c# .net nullable


【解决方案1】:

那是因为只有 引用类型 可以通过 nullint 是一个值类型。所以默认是0

【讨论】:

    【解决方案2】:

    int 永远不能为空(尽管它可能为 0)。这更有意义:

    public bool IsPersonIdNull(int? id)
    {
        return id == null;
    }
    

    这里不需要三元运算符,因为id == null 的结果已经是布尔值了。

    【讨论】:

    • 感谢您的回复,但此解决方案无法正常工作。我希望IsPersonIdNull 方法以这种方式处理所有逻辑,我可以在我的验证器上调用它。您还有其他想法吗?
    • 好吧,如果你的id 真的是int,它永远不能为空,所以验证器毫无意义。
    【解决方案3】:

    它怎么可能是空的? int 是一个值类型。您必须使用可为空的 int 作为参数,如下所示:

     public bool IsPersonIdNull(int? id) 
     {
     }
    

    然后您可以通过HasValue 属性检查它是否有值:

    if (id.HasValue) {
    
    }
    

    或者简单地使用内联返回:

    return id == null;
    

    【讨论】:

    • 您会在if 语句中添加什么逻辑?
    • @CodeChaser - return false; 或者您可以使用return id == null;,就像我在回答中显示的那样。
    • 此解决方案无法正常工作。我希望IsPersonIdNull 方法以这种方式处理所有逻辑,我可以在我的验证器上调用它。您还有其他想法吗?
    • @CodeChaser - 你还没有把所有的逻辑都放在你的问题中......
    【解决方案4】:

    您还可以为任何类型创建泛型方法:

    public bool IsPersonIdNull<T>(T instance)
    {
        return instance == default(T);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2012-01-09
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2021-02-13
      相关资源
      最近更新 更多