c# - 如何将 List<T> 初始化为给定大小(相对于容量)?

标签 c# .net generics list initialization

.NET 提供了一个通用的列表容器,其性能几乎相同(请参阅数组与列表的性能问题)。但是它们在初始化方面有很大的不同。

数组很容易用默认值初始化,并且根据定义它们已经具有一定的大小:

string[] Ar = new string[10];

这允许一个人安全地分配随机项目,比如说:

Ar[5]="hello";

有了列表,事情就更棘手了。我可以看到两种执行相同初始化的方法,这两种方法都不是您所说的优雅:

List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);

string[] Ar = new string[10];
List<string> L = new List<string>(Ar);

什么是更清洁的方法?

编辑:到目前为止的答案是指容量,这与预填充列表不同。例如,在刚刚创建的容量为 10 的列表中,不能执行 L[2]="somevalue"

编辑 2:人们想知道为什么我要以这种方式使用列表,因为这不是它们的预期使用方式。我可以看到两个原因:

  1. 可以非常有说服力地论证列表是“下一代”数组,增加了灵 active 而几乎没有损失。因此,默认情况下应该使用它们。我指出它们可能不那么容易初始化。

  2. 我目前正在编写的是一个提供默认功能的基类,作为更大框架的一部分。在我提供的默认功能中,列表的大小是高级已知的,因此我可以使用数组。但是,我想为任何基类提供动态扩展它的机会,因此我选择了一个列表。

最佳答案

List<string> L = new List<string> ( new string[10] );

关于c# - 如何将 List<T> 初始化为给定大小(相对于容量)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/466946/

相关文章:

c# - 处理关闭/断开网络套接字连接(CloseAsync 与 CloseOutputAsync)

c# - 通过C#登录网站

c# - 在 wpf 中的 observablecollection 中的集合更改之前做一些事情

java - 我怎样才能合并任何列表? - java

C# windows 窗体检查所有条目然后显示消息框

c# - ZXing.Net 解码条形码给出错误 - 无法从 'System.Drawing.Bitmap' 转换为 'ZXing.LuminanceSource'

.net - 所有右键单击的通用处理程序

c# - MaxConcurrentRequestsPerCPU 和 MaxConcurrentThreadsPerCPU 没有按照记录工作?

java - 通用 BiDiMap

Java - 泛型与转换对象