我如何处理 .FirstOrDefault 方法?
Posted
技术标签:
【中文标题】我如何处理 .FirstOrDefault 方法?【英文标题】:How do i handle .FirstOrDefault method? 【发布时间】:2012-08-23 15:57:28 【问题描述】:当我使用.FirstOrDefault
方法查询数据库时,我如何处理它给我的结果?我特别关心空值,目前我有这样的事情:
if (result == default(TypeOfResult))
handleIt();
但我不完全知道这个“默认”是什么,所以我想知道这样做是否更好:
if (result == null)
handleIt();
哪一个会起作用?而这个“默认”究竟是什么?
【问题讨论】:
查看这个 *** 链接以获得一些想法。***.com/questions/8339988/… 【参考方案1】:FirstOrDefault
将返回序列中的第一个元素,或者直接返回相关类型的默认值。
因此,根据您查询的内容,默认值可能会发生变化。例如,int
的集合,default
的值将为 0。因此,检查 null
是否不起作用。
考虑:
List<int> s = new List<int>();
var x = s.FirstOrDefault();
这里x
等于0
引用类型呢?
List<MyCustomClass> s = new List<MyCustomClass>();
var x = s.FirstOrDefault();
这里x
将是null
这可能是两种方法中更好的一种:
if (result == default(TypeOfResult))
handleIt();
【讨论】:
【参考方案2】:如果TypeOfResult
是引用类型,那么
result == default(TypeOfResult)
和result == null
意思相同。
因为null
中引用类型的默认值。
default keyword 只返回给定类型的“默认值”,如果是null
中的引用类型。对于值类型,它取决于类型,例如0 代表int
等。
顾名思义,FirstOrDefault
将返回集合的第一个元素,如果集合为空,则返回给定类型的默认值。
【讨论】:
【参考方案3】:如果您想确保您的代码可以使用 default(T) 进行故障保存,其中 T 是一个值类型,您可以将您的项目装箱到 Nullable 对象中。
例如:
var ints = new List<int>()1,2,3,4,6;
int result = ints.Where(i => i == 0).FirstOrDefault();
即使列表中没有 0,结果也是 0!
var ints = new List<int>()1,2,3,4,6;
var nullable = ints.Select(i => new Nullable<int>(i));
var result = nullable.Where(i => i == 0).FirstOrDefault()
结果为空,列表中没有0!
这当然更慢并且需要更多内存,但也适用于非值类型。
【讨论】:
【参考方案4】:您应该检查 Null。 如果找不到任何结果,FirstOrDefault 将返回 NULL。
看到这个POST
【讨论】:
以上是关于我如何处理 .FirstOrDefault 方法?的主要内容,如果未能解决你的问题,请参考以下文章