Fre*_*ool 561 .net arrays list
MyClass[] array;
List<MyClass> list;
Run Code Online (Sandbox Code Playgroud)
当一个优于另一个时,有什么情况?为什么?
Mar*_*ell 550
实际上,您很少想要使用数组.绝对可以List<T>随时使用添加/删除数据,因为调整数组大小非常昂贵.如果您知道数据是固定长度的,并且您希望根据某些非常具体的原因进行微优化(在基准测试之后),那么数组可能会很有用.
List<T>提供了很多更多的功能不是一个数组(虽然LINQ找齐它一点),而且几乎总是正确的选择.params当然,除了争论.;-p
作为反击 - List<T>是一维的; 在哪里 - 因为你有矩形(等)数组,int[,]或者string[,,]- 但是在对象模型中还有其他方法可以建模这些数据(如果需要).
也可以看看:
也就是说,我在protobuf-net项目中大量使用了数组; 完全是为了表现:
byte[]对编码非常重要;byte[]缓冲区,在发送到底层流(和vv)之前我填充; 比BufferedStream等更快;Foo[]而不是List<Foo>),因为大小一旦构建就固定,并且需要非常快.但这绝对是个例外; 对于一般的业务线处理,List<T>每次都获胜.
Jon*_*eet 117
真的只是回答添加一个我很惊讶的链接尚未被提及:Eric的Lippert的博客文章"Arrays被认为有些危害".
您可以从标题中判断它建议在任何实际情况下使用集合 - 但正如Marc正确指出的那样,有很多地方阵列确实是唯一实用的解决方案.
Aln*_*tak 20
尽管推荐了其他答案List<T>,但您还是希望在处理时使用数组:
Spe*_*ort 11
除非你真的关心性能,我的意思是"你为什么使用.Net而不是C++?" 你应该坚持使用List <>.它更容易维护,并为您在幕后调整阵列大小的所有脏工作.(如果需要,List <>非常聪明地选择数组大小,因此通常不需要.)
当集合本身的不变性是客户端和提供者代码之间的契约的一部分(不一定是集合中项目的不变性)和IEnumerable不适合时,应该优先使用数组.
例如,
var str = "This is a string";
var strChars = str.ToCharArray(); // returns array
Run Code Online (Sandbox Code Playgroud)
很明显,"strChars"的修改不会改变原始的"str"对象,而与"str"的底层类型的实现级知识无关.
但是假设那样
var str = "This is a string";
var strChars = str.ToCharList(); // returns List<char>
strChars.Insert(0, 'X');
Run Code Online (Sandbox Code Playgroud)
在这种情况下,单独的代码片段不清楚插入方法是否会改变原始的"str"对象.它需要String的实现级知识才能做出决定,从而打破了"按合同设计"的方法.在String的情况下,它并不是什么大问题,但在几乎所有其他情况下它都是一个大问题.将List设置为只读确实有帮助,但会导致运行时错误,而不是编译时.
数组与数组 列表是一个典型的可维护性与性能问题。几乎所有开发人员都遵循的经验法则是,您应该同时兼顾两者,但当它们发生冲突时,请选择可维护性而不是性能。该规则的例外是当性能已被证明是一个问题时。如果你将这个原则应用到数组与数组中。列表,然后你得到的是这样的:
使用强类型列表,直到遇到性能问题。如果遇到性能问题,请确定退出到阵列是否对您的解决方案的性能有好处,而不是对您的解决方案的维护造成损害。
| 归档时间: |
|
| 查看次数: |
281136 次 |
| 最近记录: |