2009-07-09 118 views
38

我正在創建一個新的C#列表(List<double>)。有沒有辦法,除了在列表上循環,將所有的起始值初始化爲0?自動初始化C#列表

+0

這是可行的,但.net中的列表沒有定義的大小,因此其類型爲pointletss – DevelopingChris 2009-07-09 15:06:44

回答

49

除了所提供的功能性的解決方案(使用對Enumerable類的靜態方法),則可以在構造傳遞的double秒的陣列。

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

這工作,因爲一個double的默認值已經爲0,而且很可能執行略勝一籌。

35

您可以使用初始化:

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

31

使用此代碼:

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

我認爲這更多的是OP所期待的。 – 2009-07-09 15:07:20

-4

對於更復雜的類型:

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

14

一種可能性是使用:

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

另一個是:

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

有點晚,但也許仍感興趣: 使用LINQ,嘗試

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

...希望避免複製列表(現在是給LINQ)。

這應該是邁克爾梅多斯的回答評論,但我缺乏聲望。