2012-11-01 65 views
0

我有一個類定義如下:當一個類已經存在它使用枚舉?

public class Category 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 

    //... additional properties ... 
} 

我的數據庫中有大約10個類別,並設定不太可能在未來改變(雖然它是可能的新類別將被添加零星)。每個類別都有許多與其相關的字段。

大多數情況下,其他類只填充類別Id。我需要根據具體的類別執行不同的操作。

例如:

if (categoryId == 1) 
{ 
    //do something 
} 
else 
{ 
    //do something else 
} 

我期待,以避免硬編碼值執行此操作時。

我通常會爲此使用枚舉,但我不知道如何在這種情況下構造它,因爲我已經有了它的類。一個想法是創建一個名爲CategoryEnum的單獨枚舉,但這看起來很臭。另一個選擇是使用類常量。

比較類別Id與特定常數值的最明顯方法是什麼?

+0

什麼是類別? categoryID 1代表什麼? – Andre

回答

0

基於Antarr Byrd的response,似乎使用了用於最清晰代碼的類常量。

public class Category 
{ 
    public const int CATEGORY_ONE = 1; 
    public const int CATEGORY_TWO = 2; 
    //etc. 

    public int Id {get; set;} 
    public string Name {get; set;} 

    //... additional properties ... 
} 

以及比較:

if (categoryId == Category.CATEGORY_ONE) 
{ 
    //do stuff 
} 
1

這個怎麼樣:

public enum CategoryId { ... } 

public class Category 
{ 
    public CategoryId Id {get; set;} 
    public string Name {get; set;} 

    //... additional properties ... 
} 

枚舉描述了ID,而你班上的其他添加其他有用的信息。


如果你要離開這個作爲int屬性,你仍然可以使用枚舉:

public enum CategoryId { ... } 

public class Category 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 

    //... additional properties ... 
} 

然後,當你需要測試的值:

switch ((CategoryId)myCategory.Id) 
{ ... } 
+0

我不希望更改Id字段的現有實現,因爲它綁定到數據庫的PK並在許多其他地方使用。 –

+0

@RyanKohn默認情況下,'enum'實際上是一個'int',所以它從根本上沒有區別。請注意,您可以保持原樣並仍然使用枚舉。我將編輯... –

1

如果我正確理解排隊這應該是一個有效的實現。

if(categoryId == (int)Category.CategoryOne) 
{ 
... 
} 
else 
{ 
    ... 
} 
+0

澄清:您建議使用類常量? –

+0

是的,這幾乎是我們每次都這樣做的方式 –