此代码有效:
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)
是否有理由更喜欢一个(第一个,或查找)而不是另一个?
所以,使用里德的建议,我所需要的只是:
public SiteMapping GetById(int ID)
{
return = siteMappings.FirstOrDefault(p => p.Id == ID);
}
Run Code Online (Sandbox Code Playgroud)
...它是安全的/它优雅地失败(当然,当提供适当的ID值时,根本不会失败).
First如果找不到该对象,将引发异常. FirstOrDefault会更加相似Find.请注意,在您的第一个示例中,return entity;如果Id未找到null检查,那么将不会发生null检查(应该删除,并且只写为三元组没有用),因为该方法将引发异常.
FirstOrDefault是IEnumerable<T>or 上的扩展方法IQueryable<T>,这意味着它将在比Find方法更多的场景中工作,方法是在特定类上定义的方法.
如果是这样List<T>.Find,无论是FirstOrDefault和Find将是O(n)和具有基本相同的性能,所以没有明确的优势,要么.我通常更喜欢FirstOrDefault它更灵活的事实,并且允许您更改集合类型而无需更改方法.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |