相关疑难解决方法(0)

如何将List <T>初始化为给定大小(而不是容量)?

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

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

string[] Ar = new string[10];
Run Code Online (Sandbox Code Playgroud)

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

Ar[5]="hello";
Run Code Online (Sandbox Code Playgroud)

列表事情更棘手.我可以看到两种方法进行相同的初始化,这两种方式都不是你所谓的优雅:

List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
Run Code Online (Sandbox Code Playgroud)

要么

string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Run Code Online (Sandbox Code Playgroud)

什么是更干净的方式?

编辑:到目前为止的答案是指容量,这不是预先填充列表.例如,在刚创建的容量为10的列表中,无法做到L[2]="somevalue"

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

  1. 人们可以非常有说服力地认为列表是"下一代"阵列,增加灵活性几乎不会受到惩罚.因此,默认情况下应该使用它们.我指出它们可能不那么容易初始化.

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

.net c# generics initialization list

99
推荐指数
9
解决办法
17万
查看次数

使用LINQ查询初始化List <int>

List<int>通过存储两个简单常量MinValue和MaxValue来初始化构造函数:

private const int MinValue = 1;
private const int MaxValue = 100;

private List<int> integerList = new List<int>();

public Class()
{
    for (int i = MinValue ; i < MaxValue ; i++)
    {
        integerList .Add(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用简单的LINQ查询初始化列表?由于a List<T>可以用a构造IEnumerable<T>,是否存在以下形式的查询?

private List<int> integerList = new List<int>(<insert query here>);
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

c# linq

3
推荐指数
1
解决办法
3179
查看次数

标签 统计

c# ×2

.net ×1

generics ×1

initialization ×1

linq ×1

list ×1