此代码有效:
public SiteMapping GetById(int ID)
{
var entity = siteMappings.First(p => p.Id == ID);
return entity == null ? null : entity;
}
......这样做(结果相同):
public SiteMapping GetById(int ID)
{
var entity = siteMappings.Find(p => p.Id == ID);
return entity == null ? null : entity;
}
是否有理由更喜欢一个(第一个,或查找)而不是另一个?
所以,使用里德的建议,我所需要的只是:
public SiteMapping GetById(int ID)
{
return = siteMappings.FirstOrDefault(p => p.Id == ID);
}
...它是安全的/它优雅地失败(当然,当提供适当的ID值时根本不会失败)。
答案 0 :(得分:9)
First
将引发异常。 FirstOrDefault
与Find
更相似。请注意,在您的第一个示例中,如果未找到return entity;
,则将永远不会发生空检查(应该删除,并且只写为Id
,因为三元无用)方法会引发异常。
FirstOrDefault
是IEnumerable<T>
或IQueryable<T>
上的扩展方法,这意味着它可以在比Find
方法更多的方案中工作,这是一种在特定班级。
如果这是List<T>.Find
,则FirstOrDefault
和Find
都将为O(n)且性能基本相同,因此两者都没有明确的优势。我通常更喜欢FirstOrDefault
只是因为它更灵活,并且允许您更改集合类型而无需更改方法。