2012-01-21 106 views
2

所以我有一個我在C#應用程序中創建的類(myClass)。在處理這個類的數組時,我一直認爲不得不編寫一個循環來填充myClass對象的數組。我知道當你創建一個枚舉值數組時,該數組已經被設置爲默認值的枚舉實例填充。創建一個實例化的類對象數組

我想知道如果相同的排序功能,可以用一個類來實現讓喜歡打電話:

myClass[] myClassArray = new myClass[25]; 

將導致這對空構造只是實例myClass的對象的數組那個班。

+0

的可能重複:http://stackoverflow.com/questions/583574/c-sharp-why-do-you-need-to-instantiate-each-array-element – Tudor

+0

之所以所有領域你的數組將初始化爲null是類是引用類型。枚舉和原始值是值類型,因此可以使用默認值進行初始化。 –

+0

不是重複的;這個問題是一個「如何」的問題,而另一個問題是關於語言行爲的「爲什麼」問題。 –

回答

2

我知道當你創建一個枚舉值的數組時,該數組已經被設置爲默認值的枚舉實例填充。

發生這種情況是因爲枚舉基於值類型的整數類型,不能是null

初始化引用類型數組的最簡單方法是按照您所描述的方式循環(您可以使用LINQ編寫非常簡短的語法)。

+0

這是我害怕的。我只是不確定我是否可以在班上加重某些事情來讓事情變得更容易。 – marrithl2

+0

@ marrithl2 - 正如你從其他答案中看到的那樣,你可以寫:1.一種方法來做到這一點。 2.擴展方法。 3.一個LINQ查詢來做到這一點。或者,4. Henk發佈 - 如果可能,將類轉換爲結構體。 – Oded

7

試試這個:

MyClass[] myClassArray = Enumerable 
    .Range(0, 25) 
    .Select(i => new MyClass()) 
    .ToArray(); 

這將創建類的25個實例,並把它們放到一個數組。

+3

你還沒有宣佈一個循環,但循環仍在發生。 – Oded

+0

@Oded絕對沒有辦法避免循環。但是你至少可以把它從你的視線之外。 – dasblinkenlight

2

爲什麼不直接在方法中封裝惱人的循環呢?

public T[] CreateInstances<T>(int arrayLength) where T: new() 
{ 
    T[] result = new T[arrayLength]; 
    for (int i=0; i<arrayLength; i++) 
     result[i] = new T(); 
    return result; 
} 
+0

打敗我吧。我認爲這個方法應該是靜態的,但是它沒有返回結果;';) – Nuffin

相關問題