我应该用什么作为方法 IEnumerable、IList、Collection 的返回类型?

6
我正在制作一个库,将被不同的应用程序广泛使用。你可以说它是一种公共库或SDK。
目前我正在编写一个函数,它接受一个点列表,对这些点进行一些计算,然后返回更新后的点列表。那么我的问题是,我应该在参数和返回类型中使用什么?IListIEnumerable还是Collection
这里是函数。我不知道用户会如何处理输出。用户如何使用它,取决于他自己。所以在这里使用什么选项最好呢?
public static IEnumerable<Point2D> PeformSomeCalculation(IEnumerable<Point2D> points)
{
    // Do something,
    return updatedPoints;
}
4个回答

1

IList<T> 接口继承自 ICollection<T>, IEnumerable<T>IEnumerable 接口。

因此,如果你返回一个 IList<T>,那么需要 ICollection<T>IEnumerable<T> 或仅需 IEnumerable 的客户端都将感到满意。


1

您是否希望操纵点集合?

如果是,请使用 ICollectionIList,因为它们公开了 AddClearRemove 方法。

如果您需要按索引访问列表,则应选择 IList - 此接口继承自 ICollectionIEnumerable,因此可能正是您想要的。

如果您不需要修改或按索引访问集合,则使用 IEnumerable


0
作为参数,您应该使用最具体的所需类型。这意味着,如果您在函数中仅需要IEnumarable的功能,则应使用IEnumarable,而不是ICollection或IList。
而作为返回类型,您应该使用最通用的类型,但是您应该注意ICollection和IList类型。如果您在Linq to SQL中使用它们,此函数具有包含方法,但Linq无法将此类型的函数翻译成SQL。

0
通常情况下,我会尽量避免对用户的操作进行假设,除非我正在试图强制执行某个规则,例如这个集合是只读的,因此我会使用最通用的类型。另外,您可以考虑实现一个迭代器,因为您正在接受一个列表并返回一个更新后的列表。
利用yield return语句可能会方便您的客户,使他们能够使用ForEach功能。实现简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接