我该如何处理.FirstOrDefault方法?

oje*_*jek 4 .net c# entity-framework ef-code-first

当我用.FirstOrDefault方法查询数据库时,我该如何处理它给我的结果?我特别关注空值,目前我有类似的东西:

if (result == default(TypeOfResult))
{
    handleIt();
}
Run Code Online (Sandbox Code Playgroud)

但我不知道这是什么"默认",所以我想知道这样做是不是更好:

if (result == null)
{
    handleIt();
}
Run Code Online (Sandbox Code Playgroud)

哪一个会起作用?这究竟是什么"默认"?

Gab*_*abe 8

FirstOrDefault 将返回序列中的第一个元素或字面上相关类型的默认值.

因此,根据您查询的内容,默认值可能会发生变化.例如,集合int的中default值是0,所以,检查是否null是行不通的.

考虑:

List<int> s = new List<int>();
var x = s.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

x等于0

参考类型怎么样?

List<MyCustomClass> s = new List<MyCustomClass>();
var x = s.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

x将是null

这可能是两种方法中较好的一种:

if (result == default(TypeOfResult))
{
   handleIt();
}
Run Code Online (Sandbox Code Playgroud)


nem*_*esv 6

如果TypeOfResult是参考类型那么

result == default(TypeOfResult)并且result == null 意味着同样的事情.

因为引用类型的默认值null.

默认的关键字只是返回"默认值"对于一个给定类型的在引用类型的情况下null.对于值类型,它取决于类型,例如0 int等.

正如名称所暗示的那样,FirstOrDefault如果集合为空,它将返回集合的第一个元素或给定类型的默认值.