使方法返回IList<T>
或IEnumerable<T>
的更有效方法是什么?
IEnumerable<T>
它是不可变的集合,但IList<T>
是可变的,包含许多有用的方法和属性。
要将IList<T>
投射到IEnumerable<T>
,它只是参考副本:
IList<T> l = new List<T>();
IEnumerable<T> e = l;
要将IEnumerable<T>
转换为List<T>
,我们需要迭代每个元素或调用ToList()
方法:
IEnumerable<T>.ToList();
或者可以将IEnumerable<T>
传递给List<T>
构造函数,该构造函数在其构造函数中的某处执行相同的迭代。
List<T> l = new List<T>(e);
您认为哪种情况更有效?您在练习中更喜欢哪一种?
答案 0 :(得分:21)
就效率而言,两者都是接口,因此效率取决于您返回的实际具体类别。根据经验,您应始终返回对象层次结构中最高的类型,该类型适用于此方法的使用者。在您的情况下IEnumerable<T>
。如果类的使用者需要添加元素,按索引访问元素,删除元素,最好使用IList<T>
。
一如既往地编程:取决于: - )