IList <T> vs IEnumerable <T>.什么是更有效的IList <T>或IEnumerable <T>

Kun*_*vič 13 .net c# c#-4.0

什么是更有效的方法返回IList<T>IEnumerable<T>

IEnumerable<T>它是不可变的集合但IList<T>可变,并包含许多有用的方法和属性.

要投IList<T>IEnumerable<T>它仅仅是参考副本:

IList<T> l = new List<T>();
IEnumerable<T> e = l;
Run Code Online (Sandbox Code Playgroud)

要转换IEnumerable<T>List<T>我们需要迭代每个元素或调用ToList()方法:

IEnumerable<T>.ToList(); 
Run Code Online (Sandbox Code Playgroud)

或者可以传递IEnumerable<T>List<T>构造函数,该构造函数在其构造函数中的某处执行相同的迭代.

List<T> l = new List<T>(e);
Run Code Online (Sandbox Code Playgroud)

您认为哪种情况更有效?你更喜欢哪种练习?

Dar*_*rov 21

就效率而言,两者都是接口,因此效率将取决于您返回的实际具体类别.根据经验,您应始终返回对象层次结构中最高的类型,该类型适用于此方法的使用者.在你的情况下IEnumerable<T>.如果类的使用者需要添加元素,按索引访问元素,删除元素最好使用IList<T>.

所以一如既往的编程:它取决于 :-)