在LINQ中,Find优先于First,反之亦然?

B. *_*non 5 c# linq

此代码有效:

public SiteMapping GetById(int ID)
{
    var entity = siteMappings.First(p => p.Id == ID);
    return entity == null ? null : entity;
}
Run Code Online (Sandbox Code Playgroud)

......这样做(结果相同):

public SiteMapping GetById(int ID)
{
    var entity = siteMappings.Find(p => p.Id == ID);
    return entity == null ? null : entity;
}
Run Code Online (Sandbox Code Playgroud)

是否有理由更喜欢一个(第一个,或查找)而不是另一个?

UPDATE

所以,使用里德的建议,我所需要的只是:

public SiteMapping GetById(int ID)
{
    return = siteMappings.FirstOrDefault(p => p.Id == ID);
}
Run Code Online (Sandbox Code Playgroud)

...它是安全的/它优雅地失败(当然,当提供适当的ID值时,根本不会失败).

Ree*_*sey 9

First如果找不到该对象,将引发异常. FirstOrDefault会更加相似Find.请注意,在您的第一个示例中,return entity;如果Id未找到null检查,那么将不会发生null检查(应该删除,并且只写为三元组没有用),因为该方法将引发异常.

FirstOrDefaultIEnumerable<T>or 上的扩展方法IQueryable<T>,这意味着它将在比Find方法更多的场景中工作,方法是在特定类上定义的方法.

如果是这样List<T>.Find,无论是FirstOrDefaultFind将是O(n)和具有基本相同的性能,所以没有明确的优势,要么.我通常更喜欢FirstOrDefault它更灵活的事实,并且允许您更改集合类型而无需更改方法.