如何检查变量是否为null值?

23

我正在使用C# 4.0的PetaPoco微ORM。

下面的代码从数据库中检索单个行:

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

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

4个回答

34
if (result == null || result.Count() == 0) {
    // Checks whether the entire result is null OR
    // contains no resulting records.
}
我觉得问题不在于你对 null 的检查,因为 LINQ 是延迟加载的。你的错误在于使用表达式 db.SingleOrDefault<TdUsers>(getUserQuery);.Single<T>(expression) 不会返回 null——如果结果没有值,则会出现错误。而 .SingleOrDefault<T>(expression) 会返回 null 值,如果表达式没有返回值——因此最好与类似 if (result == null) 的类型检查结合使用,就像你在这里使用的一样。

1
尝试使用result != null,但显示“对象引用未设置为对象的实例”。 - RKh
4
@RPK - 你能把你的代码放在问题里吗?这样应该可以解决问题。 - ChrisF
!result.Any() :) - nawfal

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

在上述代码中,SingleOrDefault将返回null值或指定的泛型类型(在运行时已知)。
要检查返回值是否为null,您可以简单地使用
if(result!=null)
{
//do your code stuff 
}
else
{
//stuff do be done in case where result==null
}

4
您可以这样做:
result.ToList() // Convert result to a list

if (result.Any()) {
   // result is not null
}

NO result==null 不会总是为false.. 你认为任何引用类型的默认值是什么? - Parv Sharma
1
这种方法并不适用于每种情况,因为 result 可能为空,此时调用 .ToList().Any() 将会抛出 NullReferenceException - Troy Alford

2
 var v = result.ToList();

现在进行检查

if (v is not null)
{

}
else if (v.Count()>0)
{


}

请看我的上面的回答中的评论。 - Troy Alford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接