【问题标题】:What should I use as return type of method IEnumerable, IList, Collection or what我应该使用什么作为方法 IEnumerable、IList、Collection 的返回类型或什么
【发布时间】:2013-09-16 11:49:57
【问题描述】:

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

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

所以这里是函数。我不知道用户会对输出做什么。用户如何使用它,取决于他。那么在这里使用什么是最好的选择。

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

【问题讨论】:

    标签: c# .net collections ienumerable ilist


    【解决方案1】:

    您希望对积分集合进行操作吗?

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

    如果您需要对列表进行索引,那么您应该选择IList - 此接口继承自ICollectionIEnumerable,所以这可能就是您所追求的。

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

    【讨论】:

      【解决方案2】:

      一般来说,我会尽量不假设用户会做什么,除非我试图强制执行一个规则,比如这个集合是只读的,所以我会使用最通用的类​​型。此外,您可以考虑实施 iterator,因为您正在接受一个列表并返回一个更新的列表。

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

      【讨论】:

        【解决方案3】:

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

        作为返回类型,您应该使用最通用的类​​型,但您应该注意 ICollection 和 IList 类型。如果你在 Linq to SQL 中使用这个 - 这个函数有方法 contains 但 Linq 不能将此类型的函数转换为 SQL。

        【讨论】:

          【解决方案4】:

          IList&lt;T&gt; 接口继承自 ICollection&lt;T&gt;IEnumerable&lt;T&gt;IEnumerable

          因此,如果您返回 IList&lt;T&gt;,那么想要 ICollection&lt;T&gt;IEnumerable&lt;T&gt; 或只是 IEnumerable 的客户都会很高兴。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-31
            相关资源
            最近更新 更多