2012-12-08 37 views
1

好的構造有名稱的對象,我有這樣一段代碼:定義使用動態值

int arrPanelsRequired = 4; 
string airport; 
int arrPanelsMade = 0; 
for (; arrPanelsMade <= arrPanelsRequired; arrPanelsMade++) 
{ 
    Panel arrPanelXXX = new Panel(); 

和我需要更換XXXarrPanelsMade值。我發現了幾種方法來命名變量值後的對象,但是,我無法在這裏應用它們中的任何一個:(

+3

爲什麼你需要這樣做?聽起來你實際上正在尋找一個列表或數組。 – Ryan

回答

2

,我不認爲它會在一般一個好主意,更不用說在C#。我可以看到很多arr前綴,這導致我使用數組。我想你可能正在尋找這樣的東西:

int arrPanelsRequired = 4; 
Panel[] panels = new Panel[arrPanelsRequired]; 
for (int arrPanelsMade = 0; arrPanelsMade < arrPanelsRequired; arrPanelsMade++) 
{ 
    panels[arrPanelsMade] = new Panel(); 
} 
1

你試圖做的是不好的練習,它以弱類型語言傳遞,但是在C#等強類型語言中,需要顯式聲明變量,這有助於編譯器捕獲可能由錯字或一般開發錯誤導致的錯誤,例如,如果變量爲arrPanel089,那麼你怎麼能編譯器知道它是否已被聲明?強類型看起來像來自弱類型語言的約束,但它確實是一個非常好的工具,可以爲開發人員節省大量的頭痛。

如果要創建一組面板,將它們存儲在一個數組/列表/ etc中,並通過它們來訪問它們DEX。如果你想給他們一個密鑰,把他們存儲在一個字典中,允許你通過鍵訪問值。

+2

這不僅是他們不應該是,而是他們需要的。 –

+0

好點改變了措辭;) –

1

您應該將面板添加到列表或數組,後來被索引來訪問它們:

arrPanel = new Panel[arrPanelsRequired]; 
for(int idx = 0 ; idx < arrPanelsRequired ; idx++) 
    arrPanel[idx] = new Panel(); 
1

你有幾件事情在這裏引發紅旗。我會稍微解釋一下你的問題,因爲我認爲你可能會在幾個方面走錯路。

  1. 降「改編」的前綴,只需撥打您的變量它們是什麼 - 不要試圖仿效Hungarian Notation除非你有很好的理由這樣做。

  2. 如果您不打算在循環頭中執行初始化,請考慮使用while循環而不是for循環。

  3. 現在你的問題。不,這種語言不能像那樣工作。改爲使用List<Panel>類。這將允許您動態添加更多面板,而無需預先定義您想要的數量,例如在數組中。