提问人:Денис Леонтєв 提问时间:9/24/2023 更新时间:9/24/2023 访问量:51
在这种情况下和一般情况下,返回什么更好?IEnumerable<T> 或 List<T>(甚至其他东西?[已结束]
What is better to return in this case and generally? IEnumerable<T> or List<T> (or even something else?) [closed]
问:
public async Task<ActionResult<IEnumerable<string>>> GetAllMemoriesNamesForCurrentUser()
{
var currentUserId = User.GetUserId();
var currentUser = await _repositoryManager.User.GetUserByIdAsync(currentUserId,trackChanges: false);
if(currentUser is null)
{
return NotFound("User is not found");
}
IEnumerable<string> memoriesNames = currentUser.Memories.Select(m => m.Title);
return Ok(memoriesNames);
}
我知道,它们都可以正常工作。但是,仍然非常有趣的是,其中哪一种被认为是更好的做法,哪种效果更快。感谢您的回复:>
答:
1赞
Rezzen
9/24/2023
#1
框架设计指南建议在需要返回可由调用方修改的集合或只读集合的 ReadOnlyCollection 时使用类 Collection。
这比简单更受欢迎的原因是,它不会通知调用者是否只读。IList
IList
如果返回 ,则调用方执行某些操作可能会有点棘手。此外,您不再允许调用方灵活地修改集合,这是您可能想要的,也可能不是。IEnumerable<T>
请记住,LINQ 包含一些技巧,并将根据执行某些调用的类型来优化这些调用。因此,例如,如果您执行一个并且基础集合是 List,则它不会遍历所有元素。Count
就个人而言,对于 ORM,我可能会坚持使用作为我的返回值。Collection<T>
评论
2赞
gilliduck
9/24/2023
你能用一些参考资料来支持这个建议吗?
0赞
Yashoja Lakmith
9/25/2023
嗯,这是一个 HTTP 操作方法,“调用者”永远没有机会修改集合。只有有机会修改集合的 JSON 序列化程序是配置为由应用程序使用的 JSON 序列化程序。在这种情况下,返回或或无关紧要,因为 and 实现和 JSON 序列化程序都有最终决定权。IEnumerable<T>
ICollection<T>
IList<T>
ICollection<T>
IList<T>
IEnumerable<T>
评论