gpt4 book ai didi

c# - 效率的损失是否值得返回 IEnumerable 而不是 List?

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:28 28 4
gpt4 key购买 nike

每次我不得不返回一个集合时,我都会返回一个列表。我刚刚读到我应该返回 IEnumerable 或类似的接口(interface)(例如 IQueryable)。

我看到的问题是我经常想使用列表。为此,我必须对返回的结果执行 .ToList()

例子

//...
List<Guid> listOfGuids = MyMethod().ToList();
//...
public IEnumerable<Guid> MyMethod()
{
using (var context = AccesDataRépart.GetNewContextRépart())
{
return context.MyTable.ToList();
}
}

正在执行 .ToList() 两次的正确做法。

最佳答案

如果调用者确实需要一个列表,返回一个列表(如果你有的话)。当您已经有了一个列表,并且当您知道调用者将需要一个列表时,返回一个 IEnumerable 只是浪费,而且没有任何实际好处。

如果您觉得有可能在该方法的 future 版本中更改要返回的对象的基础类型,它可能会使库实现者更容易返回接口(interface)相反,但是当返回派生程度更高的类型时,方法的调用者会更容易(与只给定接口(interface)相比,他们有能力用它做更多的事情)。

与输入参数相反。当在派生程度越高的类型中传递参数时,库实现者使用该类型的“能力”就越大,尤其是在未来的修订版中,但是使用限制更少的类型会使库的调用者的生活更轻松,因为它们不会不需要将他们拥有的转换为您的方法接受的。

这使得在编写库公共(public) API 时需要考虑这些决定。你需要考虑你现在需要多少“力量”,以及你认为将来可能需要多少。一旦您知道类型对您的工作有多大的限制/通用性,您就可以努力使您的方法更方便调用者使用。没有一个答案适用于所有 情况。说你应该总是返回 IEnumerable 而不是 List 是不合适的,就像说你应该总是返回 List 也是不合适的.你需要根据你所处的具体情况做出判断。

关于c# - 效率的损失是否值得返回 IEnumerable 而不是 List?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20221151/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com