MyClass[] array;
List<MyClass> list;
当一个比另一个更可取的情况是什么?,为什么?
MyClass[] array;
List<MyClass> list;
当一个比另一个更可取的情况是什么?,为什么?
当前回答
如果我确切地知道我需要多少元素,比如我需要5个元素,而且只需要5个元素,那么我就使用数组。否则我只使用List<T>。
其他回答
它们可能不受欢迎,但我是游戏项目中的数组的粉丝。 -迭代速度在某些情况下是很重要的,如果你对每个元素不做太多操作,数组上的foreach的开销就会大大减少 -添加和删除helper函数并不难 -速度比较慢,但如果你只建了一次,那就无所谓了 -在大多数情况下,更少的额外内存被浪费(只有数组结构才真正重要) -稍微少一点垃圾和指针和指针追逐
话虽如此,在实践中,我使用列表的次数远多于数组,但它们都有各自的位置。
如果List是内置类型,那么他们就可以优化包装器和枚举开销。
它完全取决于需要数据结构的上下文。例如,如果您正在创建供其他函数或服务使用的项,则使用List是完成该任务的最佳方式。
现在,如果你有一个项目列表,你只是想在网页上显示它们,数组是你需要使用的容器。
在现实中,很少需要使用数组。当您想添加/删除数据时,一定要使用List<T>,因为调整数组的大小是非常昂贵的。如果您知道数据是固定长度的,并且由于某些非常特定的原因(在基准测试之后)想要进行微观优化,那么数组可能会很有用。
List<T>提供了比数组更多的功能(尽管LINQ稍微均衡了一点),并且几乎总是正确的选择。当然,除了参数参数。- p;
当counter - List<T时,>是一维的;比如你已经有了int[,]或string[,,]这样的矩形数组,但是在对象模型中还有其他方法来建模这样的数据(如果你需要的话)。
参见:
如何/何时在c#.net中放弃使用数组? 数组,重点是什么?
也就是说,我在我的protobuf-net项目中大量使用数组;完全为了性能:
它做了很多位移动,所以字节[]对于编码非常重要; 我使用一个本地滚动字节[]缓冲区,我在发送到底层流(和v.v v.)之前填充;比BufferedStream等更快; 它在内部使用基于数组的对象模型(Foo[]而不是List<Foo>),因为大小一旦构建就固定了,并且需要非常快。
但这绝对是个例外;对于一般业务线处理,List<T>每次都胜出。
实际上,我只是想添加一个链接,我很惊讶还没有提到:Eric的Lippert的博客条目“数组被认为有点有害”。
您可以从标题中判断,它建议在任何可行的地方使用集合——但正如Marc正确地指出的那样,在很多地方,数组确实是唯一可行的解决方案。
除非你真的关心性能,我的意思是,“你为什么使用。net而不是c++ ?”你应该坚持使用List<>。它更容易维护,并为您在幕后完成调整数组大小的所有繁琐工作。(如果有必要,List<>在选择数组大小方面非常聪明,所以通常不需要这样做。)