自动初始化C#列表

Jas*_*Cav 47 .net c# collections list

我正在创建一个新的C#List(List<double>).除了在列表上执行循环之外,还有一种方法可以将所有起始值初始化为0吗?

Mic*_*ows 58

除了提供的功能解决方案(使用Enumerable类上的静态方法),您还可以double在构造函数中传递一个s 数组.

var tenDoubles = new List<double>(new double[10]);
Run Code Online (Sandbox Code Playgroud)

这是因为an的默认值double已经为0,并且可能表现稍好一些.

  • 我怀疑它实际上会表现得稍差一些.`List <T>`构造函数复制其数组,因此该方法分配两个数组.LINQ方法使用迭代器而不分配大量内存.另一方面,给它一个数组将允许它使用正确的大小,如果有更多元素而不是`List <T>`的默认容量,这将保存数组大小调整.(8,IIRC) (4认同)

Jho*_*re- 44

您可以使用初始化程序:

var listInt = new List<int> {4, 5, 6, 7};
var listString = new List<string> {"string1", "hello", "world"};
var listCustomObjects = new List<Animal> {new Cat(), new Dog(), new Horse()};
Run Code Online (Sandbox Code Playgroud)

所以你可以使用这个:

var listInt = new List<double> {0.0, 0.0, 0.0, 0.0};
Run Code Online (Sandbox Code Playgroud)

否则,使用默认构造函数,List将为空.

  • “否则,使用默认构造函数,List 将被初始化为 0 个元素。” 需要明确的是,该列表将为空,而不是所有条目都设置为默认值。 (3认同)
  • 请记住,这只适用于VS2008/C#3/VB9,而不适用于早期版本(VS2005/C#2/VB8) (2认同)

SLa*_*aks 37

使用此代码:

Enumerable.Repeat(0d, 25).ToList();
new List<double>(new double[25]);     //Array elements default to 0
Run Code Online (Sandbox Code Playgroud)

  • 第一个应该是var list = Enumerable.Repeat(0d,25).ToList(); (3认同)

jas*_*son 18

一种可能性是使用Enumerable.Range:

int capacity;
var list = Enumerable.Range(0, capacity).Select(i => 0d).ToList();
Run Code Online (Sandbox Code Playgroud)

另一个是:

int capacity;
var list = new List<double>(new double[capacity]);
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 5

有点晚了,但也许仍然感兴趣:使用 LINQ,尝试

var initializedList = new double[10].ToList()

...希望避免复制列表(现在由 LINQ 决定)。

这应该是对迈克尔梅多斯答案的评论,但我缺乏声誉。