2012-02-17 86 views
1

如何縮短聲明和即時數組的對象?以最簡單的方式實例化一個對象數組?

class clsPerson{public int x, y;}

...

clsPerson[] objArr = new clsPerson[1000]; //How invoke here constructor? without creating for loop and objArr[i] = new clsPerson();

+4

只是好奇:爲什麼將它命名爲'clsPerson'而不是'Person'?很明顯,這是一門課 - 大部分課程都是課堂。 – 2012-02-17 18:11:09

+0

http://stackoverflow.com/a/1739047/932418 – 2012-02-17 18:19:37

+0

我想我可以(羞愧地)回答這個問題。這是一個古老的VB6命名類的方式 - 不是我當然會知道的:-) – 2012-02-17 18:23:04

回答

7

您必須調用每個項目的構造。沒有辦法分配一個數組並在不構建每個項目的情況下調用項目上的類構造函數。

你可以從循環中使用縮短(一點點):

clsPerson[] objArr = Enumerable.Range(0, 1000).Select(i => new clsPerson()).ToArray(); 

就個人而言,我還是通過它分配陣列和環(和/或將其移動到一個輔助程序),雖然它非常清晰,但相當簡單:

clsPerson[] objArr = new clsPerson[1000]; 
for (int i=0;i<1000;++i) 
    clsPerson[i] = new clsPerson(); 
+0

嗯,我知道這很簡單,但我看到很多功能,如: 列表 list = new List ({1,2,3}); 或 foreach(字符串在新字符串[] {「aaa」,「bbb」}) – mike00 2012-02-17 18:15:37

+0

@Maniekb好吧,正如我所說 - 你可以使用LINQ來做到這一點,但我個人會避免在這種情況下.. 。 – 2012-02-17 18:17:52

+0

@Maniekb但是當然你可以使用數組初始值設定語法,如果你想在初始化程序中輸入'new clsPerson()'1000次。 – phoog 2012-02-17 18:30:10

12

在此場景中,必須爲陣列中的每個項目運行構造函數。無論是否使用循環,都必須訪問數組中的每個元素的集合初始化程序或輔助方法。

如果你只是想找一個方便的語法雖然你可以使用下面的

public static T[] CreateArray<T>(int count) where T : new() { 
    var array = new T[count]; 
    for (var i = 0; i < count; i++) { 
    array[i] = new T(); 
    } 
    return array; 
} 

clsPerson[] objArary = CreateArray<clsPerson>(1000); 
+0

謝謝,但我的意思是別的。好的模板:)。陣列[I] = .. – mike00 2012-02-17 18:20:01

0

如果這將是有意義的話,你可以改變class clsPersonstruct Personstruct s總是有一個默認值。

相關問題