使用列表数组 - 最佳实践

时间:2010-12-02 16:37:29

标签: c#

我有一个c#newbie问题。以下两个中的优良做法是什么? ...并且列表比数组更慢或更快?

        //Method 1
        int[] i_array = { 2, 0, 110, 53455, 2223 };

        if (someBolean)
        {
            Array.Resize(ref i_array, i_array.Length + 1);
            i_array[i_array.Length - 1] = someIntValue;
        }

        //Method 2
        var i_list = new List<int>();
        i_list.AddRange(new int[] { 2, 0, 110, 53455, 2223 });

        if (someBolean)
            i_list.Add(someIntValue);

4 个答案:

答案 0 :(得分:11)

当您需要可以增长或缩小的集合时使用列表。

如果您知道长度并且不想更改它,请使用数组。


您可以使用collection initializers初始化列表,因此您可以获得与初始化数组类似的语法:

var list = new List<int> { 2, 0, 110, 53455, 2223 };

if (someBoolean)
{
    list.Add(someIntValue);
}

答案 1 :(得分:5)

后者被认为是可变大小集合的最佳实践。

根据您正在使用的集合类型,Framework类将在内部执行类似于您在第一个示例中执行的操作(除了通过一个元素调整大小,它会以更大的大小递增,因此您具有额外的缓冲空间以保持添加元素。)

但一般来说,你不想重新发明轮子。该框架提供了大量可变大小的集合类。使用它们而不是自己编写。

答案 2 :(得分:3)

列表在内部使用数组,所以我希望这两个数据的性能相同。

使用列表进行编程时比使用原始数组更难产生错误,所以我更喜欢大多数时候使用列表。

答案 3 :(得分:0)

两者都是IEnumerables,所以你可以在两者上执行类似的操作。列表的好处是Justin Niessner所说的,可变大小的集合。此外,调整数组大小将需要框架重新分配内存,而List表现为链接列表,只是添加或删除集合中的元素。