这是一个有趣的问题......有一个集合是 .net框架中的某个结构吗?
只是为了澄清,即使您将泛型参数设置为值类型,所有现有集合(列表,数组等)都是引用类型.但我想知道是否有一种方法可以制作一个实际上是结构的集合.我显然不打算传递它(这将导致大量的复制)...我会把它作为我班级的私人成员(内部状态),所以它只定义一次.我的想法是,我可以避免调用垃圾收集器只是为了制作一个小集合(想想XNA).
假设一个不存在,问题的第二部分是,这将是什么是理想的数据结构.链表?
不,这种类型不存在,这不是一个好主意.根据Microsoft准则,结构应该是小的不可变值类型.
从价值类型使用指南:
- 就像原始类型一样.
- 实例大小小于16个字节.
- 是不可改变的.
- 值语义是可取的.
将链表实现为值类型将很困难,因为链接列表通常是递归定义的.这很好用:
class Node<T>
{
public T Value;
public Node<T> Next;
}
Run Code Online (Sandbox Code Playgroud)
但是这会失败,因为结构体具有固定的大小,并且在定义结构时必须知道该大小:
struct Node<T>
{
public T Value;
// Error: Struct member 'Node<T>.Next' of type 'Node<T>'
// causes a cycle in the struct layout
public Node<T> Next;
}
Run Code Online (Sandbox Code Playgroud)