![](/img/trans.png)
[英]What interface should my service return? IQueryable, IList, IEnumerable?
[英]What should I use as return type of method IEnumerable, IList, Collection or what
我正在制作一个将被不同应用程序广泛使用的库。 您可以说它是一种公共库或SDK。
目前,我正在使用一个函数,该函数需要一个点列表对这些点执行一些计算,然后返回更新的点列表。 因此,我的问题是,在参数中应使用什么作为返回类型。 IList
, IEnumerable
或Collection
。
所以这里是功能。 我不知道用户将如何处理输出。 用户如何使用它,就在他身上。 因此,什么是在这里使用的最佳选择。
public static IEnumerable<Point2D> PeformSomeCalculation(IEnumerable<Point2D> points)
{
// Do something,
return updatedPoints;
}
IList<T>
接口继承自ICollection<T>
, IEnumerable<T>
和IEnumerable
。
因此,如果返回IList<T>
,则需要ICollection<T>
, IEnumerable<T>
或仅IEnumerable
客户端都会很高兴。
您是否希望对积分收集进行操作?
如果是这样,请使用ICollection
或IList
因为这些公开了Add
, Clear
和Remove
方法。
如果您需要为列表建立索引,则应选择IList
此接口继承自ICollection
和IEnumerable
因此可能就是您想要的。
如果不需要修改集合或对索引建立索引,请使用IEnumerable
。
作为参数,您应该使用最特定的必需类型。 这意味着如果仅在功能上需要IEnumarable的功能,则应使用IEnumarable,而不是ICollection或IList。
作为返回类型,应使用最通用的类型,但应注意ICollection和IList类型。 如果您在Linq to SQL中使用此功能-该函数包含方法,但是Linq无法将此类型的此函数转换为SQL。
通常,除非我试图强制执行诸如该集合为只读的规则,否则我将尽量不对用户的行为进行假设,因此我将使用最通用的类型。 您也可以考虑实现迭代器 ,因为您正在接受列表并返回更新的列表。
利用yield return语句对于允许他们使用ForEach功能的客户来说可能很方便。 易于实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.