MyClass[] array;
List<MyClass> list;

其中一种比另一种更可取的情况是什么?为什么?

推荐答案

实际上,很少有人想要使用array.在任何时候添加/删除数据时,一定要使用List<T>,因为调整数组的大小非常昂贵.如果您知道数据是固定长度的,并且出于某种原因(在基准测试之后)希望进行微优化,那么数组可能会很有用.

List<T>提供的功能比数组多lot个(尽管LINQ将其略微拉平),并且几乎总是正确的 Select .当然,除了params个论点.;-p

作为计数器-List<T>是一维的;这里有矩形(etc)数组,比如int[,]string[,,],但在对象模型中有其他方法来建模此类数据(如果需要).

另见:

也就是说,我在我的protobuf-net项目中使用了lot个数组;完全是为了性能:

  • 它会进行大量的位移位,所以byte[]对于编码来说非常重要;
  • 我使用一个本地滚动byte[]缓冲区,在发送到底层流(和v.v.)之前填充该缓冲区;快于BufferedStream等;
  • 它在内部使用基于数组的对象模型(Foo[]而不是List<Foo>),因为一旦构建,大小是固定的,并且需要非常快.

但这绝对是个例外;对于一般的业务线处理,每次List<T>美元获胜.

.net相关问答推荐

无法在Designer、VS2022、. NET 8中打开WinForms表单'

DI通过对象的接口而不是实际类型来解析服务

无法在Ubuntu 22.04.3上运行带有Rider 2023和DotNet-8.0的项目

无法通过构建目标访问 dotnet 的环境变量

整个命名空间的SuppressMessage

AutoMapper 的替代品

异步总是 WaitingForActivation

抛出 ArgumentNullException

生产代码中的 System.Diagnostics.Debug.WriteLine

找不到 Microsoft.Office.Interop Visual Studio

为什么 ?: 会导致转换错误,而 if-else 不会?

[DllImport("QCall")] 是什么?

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") 返回上午时间而不是下午时间?

Convert.ToBoolean 和 Boolean.Parse 不接受 0 和 1

在任务中捕获异常的最佳方法是什么?

接口属性的 XML 序列化

C# List<> 按 x 然后 y 排序

作者主签名的时间戳发现了一个建链问题:UntrustedRoot: self-signed certificate in certificate chain

在 C# 中转义无效的 XML 字符

C#/.NET 中仅命名空间的类可见性?