How do i handle .FirstOrDefault method?
当我使用.FirstOrDefault方法查询数据库时,如何处理它给我的结果?我特别关注空值,目前我有这样的问题:
1 2 3 4
| if (result == default(TypeOfResult))
{
handleIt();
} |
但我不知道这是什么"默认",所以我想知道这样做是否更好:
1 2 3 4
| if (result == null)
{
handleIt();
} |
哪一个有效?这到底是什么"违约"?
- 签出这个stackoverflow链接以了解一些想法。stackoverflow.com/questions/8339988/…
FirstOrDefault将返回序列中的第一个元素,或者直接返回所讨论类型的默认值。
因此,根据您查询的内容,默认值可能会更改。例如,int的default值的集合将为0。因此,检查null是否不起作用。
考虑:
1 2
| List <int> s = new List <int>();
var x = s .FirstOrDefault(); |
这里,x等于0。
引用类型如何?
1 2
| List <MyCustomClass > s = new List <MyCustomClass >();
var x = s .FirstOrDefault(); |
这里的x就是null。
这可能是两种方法中较好的一种:
1 2 3 4
| if (result == default(TypeOfResult))
{
handleIt();
} |
如果TypeOfResult是引用类型,则
result == default(TypeOfResult)和result == null的意思相同。
因为null中引用类型的默认值。
默认关键字只返回给定类型的"默认值",在null中引用类型的情况下。对于值类型,它取决于类型,例如,对于int等,它是0。
顾名思义,如果集合为空,FirstOrDefault将返回集合的第一个元素或给定类型的默认值。
如果您希望这样做,请确保您的代码可以使用默认值(t)failsave,其中t是一个值类型,您可以将项目框在可为空的对象中。
例如:
1 2
| var ints = new List <int>(){1, 2, 3, 4, 6};
int result = ints .Where(i => i == 0).FirstOrDefault(); |
即使列表中没有0,结果也是0!
1 2 3
| 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!
这当然较慢,需要更多的内存,但也适用于非值类型。
您应该检查为空。如果找不到任何结果,FirstOrDefault将返回空值。
看到这个帖子