自动初始化C#列表

自动初始化C#列表

问题描述:

我正在创建一个新的C#列表(List<double>)。有没有办法,除了在列表上循环,将所有的起始值初始化为0?自动初始化C#列表

+0

这是可行的,但.net中的列表没有定义的大小,因此其类型为pointletss – DevelopingChris 2009-07-09 15:06:44

除了所提供的功能性的解决方案(使用对Enumerable类的静态方法),则可以在构造传递的double秒的阵列。

var tenDoubles = new List<double>(new double[10]); 

这工作,因为一个double的默认值已经为0,而且很可能执行略胜一筹。

您可以使用初始化:

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()}; 

所以,你可以使用这个:

var listInt = new List<double> {0.0, 0.0, 0.0, 0.0}; 

否则,使用默认构造函数,该列表将是空的。

+1

“否则,使用默认构造函数,List将使用0个元素进行初始化。清楚的是,该列表将是空的,而不是它将具有全部设置为默认值的条目。 – jason 2009-07-09 15:13:22

+0

对不起...我的英语不是很好 – 2009-07-09 15:14:58

+2

记住,这只会在VS2008/C#3/VB9,而不是工作在早期版本(VS2005/C#2/VB8) – CraigTP 2009-07-09 15:19:39

使用此代码:

Enumerable.Repeat(0d, 25).ToList(); 
new List<double>(new double[25]);  //Array elements default to 0 
+0

我认为这更多的是OP所期待的。 – 2009-07-09 15:07:20

对于更复杂的类型:

List<Customer> listOfCustomers = 
     new List<Customer> { 
      { Id = 1, Name="Dave", City="Sarasota" }, 
      { Id = 2, Name="John", City="Tampa" }, 
      { Id = 3, Name="Abe", City="Miami" } 
     }; 

从这里:David Hayden's Blog

一种可能性是使用:

int capacity; 
var list = Enumerable.Range(0, capacity).Select(i => 0d).ToList(); 

另一个是:

int capacity; 
var list = new List<double>(new double[capacity]); 

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

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

...希望避免复制列表(现在是给LINQ)。

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