.NET Collection是一个结构

Joe*_*nez 2 c# collections

这是一个有趣的问题......有一个集合 .net框架中的某个结构吗?

只是为了澄清,即使您将泛型参数设置为值类型,所有现有集合(列表,数组等)都是引用类型.但我想知道是否有一种方法可以制作一个实际上是结构的集合.我显然不打算传递它(这将导致大量的复制)...我会把它作为我班级的私人成员(内部状态),所以它只定义一次.我的想法是,我可以避免调用垃圾收集器只是为了制作一个小集合(想想XNA).

假设一个不存在,问题的第二部分是,这将是什么是理想的数据结构.链表?

Mar*_*ers 8

不,这种类型不存在,这不是一个好主意.根据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)

  • 虽然,Eric Lippert有一个关于不可变集合类型的完整博客系列:) http://blogs.msdn.com/b/ericlippert/archive/2007/12/04/immutability-in-c-part-two-a-simple -immutable-stack.aspx (5认同)