繁体   English   中英

我应该使用什么方法作为IEnumerable,IList,Collection或方法的返回类型

[英]What should I use as return type of method IEnumerable, IList, Collection or what

我正在制作一个将被不同应用程序广泛使用的库。 您可以说它是一种公共库或SDK。

目前,我正在使用一个函数,该函数需要一个点列表对这些点执行一些计算,然后返回更新的点列表。 因此,我的问题是,在参数中应使用什么作为返回类型。 IListIEnumerableCollection

所以这里是功能。 我不知道用户将如何处理输出。 用户如何使用它,就在他身上。 因此,什么是在这里使用的最佳选择。

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客户端都会很高兴。

您是否希望对积分收集进行操作?

如果是这样,请使用ICollectionIList因为这些公开了AddClearRemove方法。

如果您需要为列表建立索引,则应选择IList此接口继承自ICollectionIEnumerable因此可能就是您想要的。

如果不需要修改集合或对索引建立索引,请使用IEnumerable

作为参数,您应该使用最特定的必需类型。 这意味着如果仅在功能上需要IEnumarable的功能,则应使用IEnumarable,而不是ICollection或IList。

作为返回类型,应使用最通用的类​​型,但应注意ICollection和IList类型。 如果您在Linq to SQL中使用此功能-该函数包含方法,但是Linq无法将此类型的此函数转换为SQL。

通常,除非我试图强制执行诸如该集合为只读的规则,否则我将尽量不对用户的行为进行假设,因此我将使用最通用的类​​型。 您也可以考虑实现迭代器 ,因为您正在接受列表并返回更新的列表。

利用yield return语句对于允许他们使用ForEach功能的客户来说可能很方便。 易于实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM