c#array vs generic list

L G*_*L G 32 c# arrays generic-list

我基本上想知道在下面提到的场景中使用通用列表而不是数组的差异或优点

class Employee
{
    private string _empName;

    public string EmpName
    {
       get{ return _empName; }
       set{ _empName = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)
1. Employee[] emp 
2. List<Employee> emp
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我优点或缺点,以及哪一个更喜欢?

Tho*_*mas 20

一个很大的区别是List<Employee>可以扩展(可以调用Add on it)或缩小(你可以调用Remove),而Employee []的大小是固定的.因此,Employee[]除非需要它,否则更难以使用.

  • ToArray()是一个早于LINQ的List对象的内置方法.LINQ为IEnumerables增加了一个类似的方法. (3认同)

Jus*_*ant 15

最大的区别是,一旦创建阵列,就不能使阵列更长或更短.但是,列表实例可以添加或删除元素.还有其他差异(例如,可用的方法集不同)但添加/删除是最大的区别.

我喜欢List,除非有一个非常好的理由使用数组,因为List的灵活性很好,并且相对于你的代码通常做的大多数其他事情的成本,性能损失非常小.

如果您想深入了解许多有趣的技术细节,请查看此StackOverflow线程,该线程深入研究List vs. Array问题.

  • 这并不能使它们一成不变; 你仍然可以交换内容.它只是使它们固定大小. (6认同)

Mar*_*ell 7

使用通用列表,您可以廉价地使用Add/ Removeetc(至少在远端).调整数组大小(添加/删除)的成本更高.明显的缺点是列表具有备用容量,因此可能浪费几个字节 - 在大多数情况下不值得担心(并且你可以修剪它).

通常,首选列表,除非您知道您的数据永远不会改变大小.

API方面,因为LINQ在它们之间几乎没有选择(即List<T>LINQ 上的额外方法很大程度上是重复的,因此数组可以免费获得它们).

另一个优点是,使用列表,您不需要公开setter:

private readonly List<Foo> items = new List<Foo>();
public List<Foo> Items { get { return items; } }
Run Code Online (Sandbox Code Playgroud)

消除一系列null错误,并允许您保持对数据的控制(特别是如果您IList<>在更改内容时使用支持检查/验证的其他实现).