2011-12-05 73 views
1

我有一個組合框,選中後,將在3個文本框中顯示文本。自定義數據類型(結構)vs數組

組合框項目是50個州,文本框顯示州法規信息。現在,我正在使用多維數組來保存每個狀態的數據(數組中的每個項目都包含狀態,項目1,項目2,項目3)。

我的問題是:創建一個包含3個項目的狀態數據類型會更好還是更緊湊,實際上如果這是一種有效的方法?我不喜歡這個陣列,只是我現在知道該怎麼做。

大多數情況下,3種數據類型都會重複使用。

例如,其中一個是州所使用的時區,因此只有6種可能的選項。

我沒有在我面前的代碼或我會發布它,只是我正在考慮的東西。

+0

在這種情況下的自定義數據類型定義了要走的路。 – TheBoyan

回答

4

關於多維數組,你必須問自己一個問題:「其他程序員可以查看它並理解發生了什麼嗎?」

更緊湊嗎?也許mayby不會。這完全取決於代碼。事實上,除非你處理的內存要求非常低,否則可能沒有關係。這樣想一想,假設每個時區佔用四個字節(一個整數的大小)。輸入每個時區意味着你已經使用了50 x 4 = 200字節。不足以擔心任何一種方式。

我會改變它,因爲在6個月內你可能會很難理解它的功能。可讀性和可維護性在幾乎所有情況下都是重要的。

所以也許一個例子是:

class State 
{ 
    public State (string stateId, int timeZoneOffset) 
    { 
     StateId = stateId; 
     TimeZoneOffSet = timeZoneOffset; 
    } 

    public String StateId {get;set;} 
    public int TimeZoneOffest {get;set;} 
} 

public class StatesAndTerritories 
{ 
    List<State> _states = new List<State> 
    public StatesAndTerritories() 
    { 
     //_state.Add state information here 

     _state.Add(new State("AZ", -6); ...... 

    } 

    public IEnumerable<State> GetStates(){ 
    return _state; 
    } 

    public IEnumerable<State> GetStatesInZimeZone(int timezone) 
    {} 

    etc.. 
} 
+0

我寧願這樣做,但同時我不想初始化50個不同的實例。我是否認爲我不得不去做,或者你知道如何做不到的好指導?我(顯然)對自定義數據類型以及如何實現相當新,但絕對想要了解它。 –

+1

創建50個結構或對象的實例不應該比初始化包​​含相同數據的50個數組行更有用。 –

+0

@SeanU我同意。您已經在進行初始化工作,最好使用可以輕鬆使用的格式。 – kemiller2002

2

尋求自定義類型,它更清潔(可以通過名稱訪問屬性),更少出錯(比名稱更難混淆名稱)和可維護(屬性不是「排序」,沒有不必要的length需要適合財產數量,如果你想要不同類型的財產,你有類型安全)。

+0

查看對上面的凱文的回覆:) –

+0

@KevenM:如果你是新的自定義類型,我會建議你閱讀[本指南](http://msdn.microsoft.com/en-us/library/ms173109.aspx) 。如果你已經用循環初始化你的數組,你可以創建對象並在循環中設置它們的字段/屬性。 –

1

的源代碼將是有益的,我明白究竟你在做什麼。

如果純粹的性能是一個目標,那麼我會建議使用一個結構體來存儲每個狀態的信息。

這會加速對元素的訪問,並且更容易跟蹤哪個變量具有哪個值(命名變量而不是數組索引)。記住一個結構是一個值類型是非常重要的,所以如果你將它傳遞給另一個函數,那麼函數將得到結構的一個副本,而不是原始的。如果直接使用數組,這不是問題,但如果使用List或需要將選定的狀態信息傳遞給另一個方法,則會出現問題。

+0

我知道這不是代碼的替代品,但基本上我已經初始化了數組,然後用foreach塊遍歷它以將內容發送到單個文本框。 –

+0

首先嚐試使用for(int i = 0; i Trisped