就像数组是顺序内存分配一样,列表可能与链表以相同的方式存储在内存中(如果我错了,请纠正我)。在C#中,IEnumerable如何存储在内存中?假设我有一个类。
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
以下两种情况下内存分配将有所不同。为什么编译器不允许我们编辑IEnumerables?
IList<Employee> EmpList ;
Or
IEnumerables<Employee> EmpList ;
Array
和LinkedList
也都是IEnumerable,但正如你指出的那样,它们在内存存储方面是不同的。 - user2160375IEnumerable<T>
来存储集合,因为接口IEnumerable<T>
不允许插入元素,它只允许读取。 - CodorList<T>
实现了IEnumerable<T>
,但是列表绝对是集合。我会说IEnumerable<T>
并没有暴露插入接口,但它可以(但不一定,例如机器状态)包含集合。 - user2160375IList<T>
和IEnumerable<T>
只是接口。实际实现取决于项的存储方式。例如,List<T>
(它同时实现了这两个接口)恰好将项存储在底层数组中。但这只是一个实现细节,未来可能会改变。- 此外,对于所有引用类型,只有引用被“存储”在底层数组中。实际对象数据可以分布在任何地方,随机分布。 - Corak