【问题标题】:How to check a var for null value?如何检查 var 的空值?
【发布时间】:2012-05-31 23:47:59
【问题描述】:

我正在使用带有 C# 4.0 的 PetaPoco Micro-ORM。

以下代码从数据库中检索单行:

var result = db.SingleOrDefault<TdUsers>(getUserQuery);

我想检查结果是否包含任何行,以及是否为空。最好的方法是什么?

【问题讨论】:

    标签: c# .net c#-4.0 .net-4.0 petapoco


    【解决方案1】:
    if (result == null || result.Count() == 0) {
        // Checks whether the entire result is null OR
        // contains no resulting records.
    }
    

    我认为问题不在于您对 null 的检查,因为 linq 是延迟加载。您的错误在于使用表达式 db.SingleOrDefault&lt;TdUsers&gt;(getUserQuery);

    .Single&lt;T&gt;(expression) 不返回 null - 如果结果没有返回值,则会出错。 但是,.SingleOrDefault&lt;T&gt;(expression) 如果表达式没有结果,则返回空值 - 因此最好与 if (result == null) 类型检查结合使用,就像您在此处使用的那样。

    【讨论】:

    • 试过结果!= null,但它显示“对象引用未设置为对象的实例”。
    • @RPK - 你能在问题中发布你的代码吗?这应该有效。
    • !result.Any() :)
    【解决方案2】:
    var result = db.SingleOrDefault<TdUsers>(getUserQuery);
    

    在上面的代码中 SingleOrDefault 将返回空值或指定的 泛型类型(在运行时已知)。

    为了检查返回值是否为空,你可以简单地使用

    if(result!=null)
    {
    //do your code stuff 
    }
    else
    {
    //stuff do be done in case where result==null
    }
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      result.ToList() // Convert result to a list
      
      if (result.Any()) {
         // result is not null
      }
      

      【讨论】:

      • NO result==null 不会一直为假。你认为任何引用类型的默认值是多少?
      • 这种方法并不适用于所有情况,因为result 可能为空,此时在调用.ToList().Any() 时会抛出NullReferenceException。跨度>
      【解决方案4】:
       var v = result.ToList();
      

      现在检查

      if (v is not null)
      {
      
      }
      else if (v.Count()>0)
      {
      
      
      }
      

      【讨论】:

      • 查看我对上述答案的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2014-03-02
      • 2011-06-03
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多