【发布时间】:2014-09-11 06:41:48
【问题描述】:
Like Array 是顺序内存分配,list 可能会以与链表相同的方式存储在内存中(如果我错了,请纠正我)。 IEnumerable 如何在 C# 中存储在内存中? 假设我有一堂课
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
在以下两种情况下,内存分配将有何不同。为什么编译器不允许我们编辑 IEnumerables
IList<Employee> EmpList ;
Or
IEnumerables<Employee> EmpList ;
【问题讨论】:
-
IEnumerable 是一个
interface。这在很大程度上取决于具体的实施。Array和LinkedList也是IEnumerable但您指出的内存存储是不同的。 -
它可以是,也可以是其他的,这取决于。界面不暗示什么。
-
不可能使用
IEnumerable<T>来存储集合,因为接口IEnumerable<T>不允许插入元素;它只允许阅读。 -
@Codor 不。
List<T>实现IEnumerable<T>但列表绝对是集合。我会说 IEnumerable不公开插入接口,但它可以(但不必,例如机器状态)包含集合。 -
@shiv - 同样,
IList<T>和IEnumerable<T>只是接口。这取决于项目如何存储的实际实现。例如List<T>(两者都实现)恰好将项目存储在底层数组中。但这只是一个实现细节,将来可能会改变。 - 此外,对于所有引用类型,只有引用“存储”在该底层数组中。实际的对象数据可能在任何地方,随机分布。
标签: c# .net memory-management