何时使用。首先以及何时使用.FirstOrDefault与LINQ?
我已经四处搜索,并且还没有真正找到明确的答案,以便何时使用.First
以及何时想要使用带有LINQ的.FirstOrDefault
。
你想什么时候使用.First
? 只有当你想要捕捉异常,如果返回没有结果?
var result = List.Where(x => x == "foo").First();
你想什么时候使用.FirstOrDefault
? 如果你总是想要默认类型,如果没有结果?
var result = List.Where(x => x == "foo").FirstOrDefault();
就此而言,Take呢?
var result = List.Where(x => x == "foo").Take(1);
当我知道或期望序列至少有一个元素时,我会使用First()
。 换句话说,当这是序列为空的例外事件时。
当你知道你需要检查是否有元素时,使用FirstOrDefault()
。 换句话说,当序列是空的是合法的。 您不应该依赖于检查的异常处理。 (这是不好的做法,可能会损害性能)。
最后,之间的差异First()
和Take()
是First()
返回元素本身,而Take()
返回包含恰好一个要素元素的序列。 (如果你传递1作为参数)。
当没有结果时, .First
会抛出异常。 .FirstOrDefault
不会,它只会返回null(引用类型)或值类型的默认值。 (例如0
代表一个int)。这里的问题不是当你想要默认类型,而是更多:你是否愿意处理异常或处理默认值? 由于异常应该例外,如果您不确定是否要从查询中获取结果,则首选FirstOrDefault
。 如果逻辑上数据应该在那里,可以考虑异常处理。
Skip()
和Take()
通常用于在结果中设置分页。 (如显示前10个结果,下一个10页等等)
希望这可以帮助。
如果没有要返回的行,则First()将抛出异常,而.FirstOrDefault()将返回默认值(对于所有引用类型为NULL
)。
所以如果你准备好并愿意处理可能的异常, .First()
很好。 如果您更愿意检查!= null的返回值,那么.FirstOrDefault()
是您更好的选择。
但我想这也是个人偏好。 使用任何一种对您更有意义的方法,并更好地适应您的编码风格。
链接地址: http://www.djcxy.com/p/5853.html上一篇: When to use .First and when to use .FirstOrDefault with LINQ?