1

请假设我有以下扩展方法,以便能够强制评估IEnumerable

public static List<T> EvaluateNow<T>(this IEnumerable<T> collection)
{
    if (collection == null)
    {
        throw new ArgumentNullException("collection");
    }
    else
    {
        return (collection.ToList());
    }
}

我想问一下是否有任何意义,IList<T>而不是List<T>作为此方法的返回类型(即向下转换为接口),以便既不将其及其依赖项绑定到特定实现(即使返回值实际上总是一List)。

4

2 回答 2

3

在这种情况下使用接口而不是类总是一个好主意。
原因不胜枚举,但例如,它极大地增加了灵活性,因为任何类只需要实现接口IList<T>即可分配给该函数的返回值。类将实现此(或其他)接口,而无需子类化 List(或等效项)。
通常,您希望使用符合要求的“最低”层次接口。在这种情况下,您可以考虑 ICollection,甚至 IEnumerable,而不是 IList。

从函数返回的类实例无关紧要,因为只返回“接口”,因此可以将它分配给实现该接口的任何类(再次,最大灵活性?)

通常,返回一些 IEnumerable 对象的函数将主要在 foreach 循环中使用。

于 2011-10-01T13:24:30.310 回答
1

扩展方法只能在实例上调用。这意味着它collection永远不会出现null在您的方法中。

所以......正如所写的那样,您的方法与扩展方法具有完全相同的行为,IEnumerable.ToList所以我没有看到任何意义。

如果它的返回类型IList如 Aaron 在他的回答中解释的那样,那将很有用。

为什么还IEnumerable.ToList没有返回 aIList对于图书馆设计者来说是一个很好的问题。

于 2011-10-01T13:28:58.923 回答