如何检查 var 的空值?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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)




【讨论】:

查看我对上述答案的评论。

以上是关于如何检查 var 的空值?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查多个 XMLNode 属性的空值?

如何在流分析中检查 JSON 属性中的空值?

我如何创建一个实用函数来检查来自 CSV 的空值并替换为打印 NULL

如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?

如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”

如何避免嵌套的空检查[重复]