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

时间:2013-09-12 07:44:34

标签: c# .net collections ienumerable ilist

我正在创建一个将被不同应用程序广泛使用的库。你可以说它是一种公共图书馆或SDK。

目前我正在开发一个函数,它获取Points列表,对这些点执行一些计算,然后返回更新点列表。所以我的问题是我应该使用什么作为返回类型和我的参数。 IListIEnumerableCollection

所以这里是功能。我不知道用户将对输出做什么。用户如何使用它,就在他身上。那么什么应该是在这里使用的最佳选择。

public static IEnumerable<Point2D> PeformSomeCalculation(IEnumerable<Point2D> points)
{
    // Do something,
    return updatedPoints;
}

4 个答案:

答案 0 :(得分:1)

IList<T>界面继承自ICollection<T>IEnumerable<T>IEnumerable

因此,如果您返回IList<T>,那么想要ICollection<T>IEnumerable<T>IEnumerable的客户都会感到满意。

答案 1 :(得分:1)

你想要操纵积分吗?

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

如果您需要将列表编入索引,那么您应该选择IList - 此接口继承自ICollectionIEnumerable,因此这可能就是您所追求的目标。

如果您不要求修改或编制索引,请使用IEnumerable

答案 2 :(得分:0)

作为参数,您应该使用最具体的必需类型。这意味着如果你只需要IEnumarable的功能,你应该使用IEnumarable,而不是ICollection或IList。

作为返回类型,您应该使用最常规的类型,但您应该知道ICollection和IList类型。如果你在Linq to SQL中使用它 - 这个函数有方法包含但是Linq不能将这个类型的函数转换为SQL。

答案 3 :(得分:0)

一般情况下,我会尝试不对用户将要做的事情进行假设,除非我试图强制执行规则,例如此集合是只读的,所以我会使用最常规的类型。您也可以考虑实施 iterator ,因为您接受列表并返回更新后的列表。

使用 yield return 语句可能对您的客户端允许其ForEach功能很方便。易于实施。