2014-11-04 70 views
0

我有一個類只有公開automatic properties of strings像名稱,ID,姓氏,我也defiend一個構造函數,並將它們也定爲string.Empty。 現在,在代碼中,我創建這個類的一個這樣的數組:調用的數組對象被設置爲NULL並且沒有設置爲構造函數值

AlternateAddressSummary[] alternateAddressSummaries = new AlternateAddressSummary[6]; 
int adrsCounter = -1; 
foreach (Addresses adrs in address_alternative) 
{ 
    adrsCounter++; 
    FillAlternateAddressSummaryObject(alternateAddressSummaries[adrsCounter], adrs); 
} 

而且FillAlternateAddressSummaryObject只是填充每個對象的屬性,例如:

private void FillAlternateAddressSummaryObject(AlternateAddressSummary alA, Addresses adrs) 
{ 
    alA.AlternateAdressLine1 = adrs.City; 
    //... 
} 

但爲什麼我就得到NULL例外alA?即使當我創建這6個數組對象時,它們也被初始化爲NULL。他們不應該被設置爲我在constructor中所說的嗎?

+0

請顯示所有相關代碼以及如何將項目設置爲string.Empty ..您是否熟悉如何使用'FormatterServices.GetUninitializedObject'方法,並從那裏您可以編寫自己的小類來設置null初始值爲string.Empty以及 – MethodMan 2014-11-04 18:17:14

+2

您不在數組中創建6個對象。您正在創建6個對象引用,並且引用默認爲null。您仍然需要通過調用構造函數來創建對象。 – 2014-11-04 18:17:26

+0

幾乎所有的'NullReferenceException'都是一樣的。請參閱「[什麼是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)」的一些提示。 – 2014-11-04 18:20:51

回答

3

那是因爲你沒有任何實例化的alternateAddressSummaries

成員,你做了什麼是有點像這樣

AlternateAddressSummary1; 
AlternateAddressSummary2; 
AlternateAddressSummary3; 
... 

你聲明的陣列的AlternateAddressSummary,但你的避風港實際上並沒有實例化它們中的任何一個。他們還在所有null


,如果你這樣做

for(int i=0; i<alternateAddressSummaries.Length; i++) 
{ 
    alternateAddressSummaries[i]= new AlternateAddressSummary(/*params*/); 
} 

,他們將被實例化,它們的值將是無論你的構造函數中設置它們。

+0

謝謝,但給出了錯誤說,地址不能在每個循環中,也改變它在循環內 – ConfusedSleepyDeveloper 2014-11-04 18:24:01

+1

@ConfusedSleepyDeveloper好點。我已經改變了使用常規循環的答案 – 2014-11-04 18:27:07

相關問題