2011-10-07 58 views
3

我一直困惑我應該使用哪種枚舉。散列表,枚舉,一個結構字典,數組(怎麼老校友),靜態字符串...只有串公共枚舉值

在我的代碼使用字符串而不是我想用一個漂亮的枚舉,如下所示:

public enum MyConfigs 
{ 
    Configuration1, 
    Configuration2 
} 

問題是,我並不總是想我枚舉toString()轉換因爲我不感興趣的enum的指數表示。

什麼是代表基於字符串值的公共枚舉的最佳方式?
最後,我很想用MyConfigs.Configuration1需要的地方在我的代碼就結了。

+0

根據你的問題,你不真的需要一個hastable也不KeyValuePair DS。你會告訴我們什麼類型是配置1,配置2等?什麼是你做這件事的目的。基本上增加更多的信息,PLZ。 – Zenwalker

+0

真的只是字符串。最後他們會在日誌中顯示爲「這個錯誤來自'Configuration1'」。 –

+0

Enum將是一個最佳選擇,但每次您需要轉換或裝箱時都會發生,從而降低性能。所以按Marc的建議去吧。 – Zenwalker

回答

1
public static class MyConfigs 
{ 
    public const string Configuration1 = "foo", 
         Configuration2 = "bar" 
} 

這與枚舉的實現方式非常相似(忽略整個「它必須是一個整數」的東西)。

+0

沒有使用一類比較難看?那麼那些枚舉表單是什麼呢? ;-) –

+1

國際海事組織,使用枚舉的字符串值將是醜陋的(更不用說非常規)與ToString()s到處都是。我說,不要害怕你的項目中會出現一些微型課程。 – Ishmaeel

+0

@moontear它是如何醜陋?它最終與定義一個枚舉沒有多大區別。 –

2

我喜歡定義「分組」常量作爲一個虛擬的靜態類的靜態成員,像這樣:

public static class FieldNames 
{ 
    public const string BRANCH_CODE = "_frsBranchCode"; 
    public const string BATCH_ID = "_frsBatchId"; 
    public const string OFFICE_TYPE = "_frsOfficeType"; 
} 

但是,當然,他們不是「枚舉」直接,所以你不能在他們的foreach除非你也提供一個靜態數組:

public static string[] AllFieldNames 
{ 
    get 
    { 
     return new string[] 
     { 
      FieldNames.BRANCH_CODE, 
      FieldNames.BATCH_ID, 
      FieldNames.OFFICE_TYPE 
     }; 
    } 
} 
1

類型安全的枚舉模式?

public class StringEnum 
{ 
    #region Enum Values 

    public static readonly StringEnum ValueOne = new StringEnum("Value One"); 
    public static readonly StringEnum ValueTwo = new StringEnum("Value Two"); 

    #endregion 

    #region Enum Functionality 

    public readonly string Value; 

    private StringEnum(string value) 
    { 
     Value = value; 
    } 

    public override string ToString() 
    { 
     return value; 
    } 

    #endregion 
} 

您可以使用此類似:

private void Foo(StringEnum enumVal) 
{ 
    return "String value: " + enumVal; 
} 

如果您再也不需要在類型安全的方式圍繞這些值傳遞給方法等,然後它可能是最好的只是一個常量堅持文件。