2011-07-19 52 views
0

我枚舉結構是這樣的如何讀取ASP.Net中的枚舉值?

public enum UserRole 
{ 
    Administrator = "Administrator", 
    Simple_User = "Simple User", 
    Paid_User = "Paid User" 
} 

現在我想讀通過使用其名稱此枚舉值假設

String str = UserRole.Simple_User; 

它給了我「簡單的用戶」在海峽代替「Simple_User」

我們如何做到這一點???

+0

爲什麼你想要Simple_User intead嗎?如果你確實爲什麼不改變枚舉值?無論如何你想完成什麼,因爲它可能是你想要使用一個枚舉,你可能需要別的東西,需要更多的上下文。 –

+2

你的代碼不能編譯... –

+0

解釋一下,你是如何編譯這段代碼併產生不需要的結果的? :-) –

回答

3

你可以做一個友好的描述,像這樣:

public enum UserRole 
    { 
     [Description("Total administrator!!1!one")] 
     Administrator = 1, 

     [Description("This is a simple user")] 
     Simple_User = 2, 

     [Description("This is a paid user")] 
     Paid_User = 3, 
    } 

並做好輔助函數:

public static string GetDescription(Enum en) 
     { 
      Type type = en.GetType(); 

      MemberInfo[] info = type.GetMember(en.ToString()); 

      if (info != null && info.Length > 0) 
      { 
       object[] attrs = info[0].GetCustomAttributes(typeof(DescriptionAttribute), false); 

       if (attrs != null && attrs.Length > 0) 
       { 
        return ((DescriptionAttribute)attrs[0]).Description; 
       } 
      } 

      return en.ToString(); 
     } 

而且使用它像:

string description = GetDescription(UserRole.Administrator); 
1

嗯,枚舉不能有字符串值。從MSDN's Enum page

枚舉是一組命名常量,其基礎類型是除Char以外的任何整型。


要獲得枚舉的字符串版本使用枚舉的方法ToString

String str = UserRole.Simple_User.ToString("F"); 
+0

它不工作枚舉給我錯誤「不能隱式轉換類型'字符串'爲'int'」和我在MSDN看到枚舉是一個字符串和int組合的集合而不是一個字符串字符串組合... –

+0

@Gaurav枚舉的不能是字符串。你的'UserRole'枚舉不起作用。 –

0

我有點困惑你的問題,因爲C#不允許你聲明由字符串支持的枚舉。你的意思是你想要得到「簡單用戶」,但你得到「Simple_User」,而不是?

如何:

var str = UserRole.Simple_User.ToString().Replace("_", " "); 
0

您可以通過屬性做到這一點,但實際上我認爲使用一個枚舉像這可能是錯誤的方式去了解的東西。

我會創建一個暴露顯示名稱屬性的用戶角色接口,然後爲每個角色實現一個新類的接口,這也讓您在將來添加更多行爲。 或者你可以使用一個抽象類,所以任何一般的行爲沒有得到複製...

2

好了,現在你知道真正的枚舉LY是,你可以給一個方便的字符串句柄號碼清單喜歡:

public enum ErrorCode 
{ 
    CTCLSM = 1, 
    CTSTRPH = 2, 
    FBR = 3, 
    SNF = 4 
} 

而且,@StriplingWarrior顯示,你可以走這麼遠,通過獲取枚舉字符串名稱和更換下劃線等,但我認爲你想要的是將一個漂亮的人字符串與每個值相關聯的方式。這個怎麼樣?

public enum ErrorCode 
{ 
    [EnumDisplayName("Cataclysm")] 
    CTCLSM = 1, 
    [EnumDisplayName("Catastrophe")] 
    CTSTRPH = 2, 
    [EnumDisplayName("Fubar")] 
    FBR = 3, 
    [EnumDisplayName("Snafu")] 
    SNF = 4 
} 

好了有可能是一些在System.ComponentModel,它這一點 - 讓我知道。我的解決方案的代碼是在這裏:

[AttributeUsage(AttributeTargets.Field)] 
public class EnumDisplayNameAttribute : System.Attribute 
{ 
    public string DisplayName { get; set; } 

    public EnumDisplayNameAttribute(string displayName) 
    { 
     DisplayName = displayName; 
    } 
} 

而時髦的枚舉擴展,使得它可能:

public static string PrettyFormat(this Enum enumValue) 
{ 
    string text = enumValue.ToString(); 
    EnumDisplayNameAttribute displayName = (EnumDisplayNameAttribute)enumValue.GetType().GetField(text).GetCustomAttributes(typeof(EnumDisplayNameAttribute), false).SingleOrDefault(); 

    if (displayName != null) 
     text = displayName.DisplayName; 
    else 
     text = text.PrettySpace().Capitalize(true); 

    return text; 
} 

因此得到人性化的價值了,你可以只是做ErrorCode.CTSTRPH.PrettyFormat()