我开始研究一个项目,我注意到ToList()被多次调用,我认为这不是必要和多余的。
第一个ToList()位于数据层,调用进入数据库并获取数据。
public IEnumerable<Company> GetCompanies()
{
return DbContext.Companies.ToList();
}
然后在控制器上,我可以看到另一个调用为ToList()
public ActionResult Index()
{
var companies = _companyService.GetCompanies().ToList();
return View(companies);
}
我相信在控制器中调用ToList()是多余的。但我只是想知道它是否对性能产生任何影响,或者语言本身会自动识别出结果实际上已经是列表而忽略了第二次调用?
更新
另一个问题是询问是否存在调用ToList()的影响。但是,我想知道对同一个对象列表是否存在多次调用ToList()的影响。有人提到应该“希望忽略”。
答案 0 :(得分:4)
是的,会对性能产生影响。即使基础IEnumerable<T>
已经是List<T>
,对ToList
的调用也会导致创建新列表(因此list != list.ToList()
)。根据原始列表的大小,这可能会产生严重的性能影响