MyClass[] array;
List<MyClass> list;

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

推荐答案

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

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

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

另见:

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

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

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

.net相关问答推荐

.NET 4.5 项目未在 Visual Studio 2022 中编译

在接口内部声明 IEnumerable 而在具体类中声明 IList

如何规范机器之间连字符的排序顺序?

如何为多种文件类型设置 FileSystemWatcher 过滤器?

什么取代了 .Net Core 中的 WCF?

.NET Core 是否支持异步控制台应用程序?

dotnet 恢复警告 NU1701

在 web api 控制器(.net 核心)中使用 async/await 或任务

为什么具有可为空值的结构的 HashSet 非常慢?

Web API 中基于令牌的身份验证,无需任何用户界面

指定的版本字符串不符合要求的格式——major[.minor[.build[.revision]]]

.NET 4.5 中的默认安全协议

无法加载文件或程序集 不支持操作. (来自 HRESULT 的异常:0x80131515)

.NET 框架如何为 OutOfMemoryException 分配内存?

Roslyn 编译代码失败

将 C# 编译为本机?

C# 6.0 是否适用于 .NET 4.0?

如何从标头中检索基本身份验证凭据?

用 double 替换 int 时的 Visual Studio 长编译

找不到 Microsoft.Office.Interop Visual Studio