2012-05-23 104 views
2

我的问题是如何获得枚举变量的值?如何获取枚举变量的值?

enter image description here 请看附件截图...“hatas”是一个标志枚举。我想 得到“HasError” - “NameOrDisplayNameTooShort”错误来显示它们。

using System; 

namespace CampaignManager.Enums 
{ 
    [Flags] 
    public enum CampaignCreaterUpdaterErrorMessage 
    { 
     NoError = 0, 
     HasError = 1, 
     NameOrDisplaynameTooShort = 2, 
     InvalidFirstName = 3, 
    } 
} 

我试过了;

Messagebox.Show(hatas); // it's showing InvalidFirstName somehow... 

非常感谢您的帮助......

回答

2

第一件事:如果你想在你的枚举使用FlagsAttribute您需要的两个大国像这样定义的值:

[Flags] 
public enum CampaignCreaterUpdaterErrorMessage 
{ 
    NoError = 0, 
    HasError = 1, 
    NameOrDisplaynameTooShort = 2, 
    InvalidFirstName = 4, 
} 

为了得到一个标记的枚举的部分,你可以试试:

var hatas = CampaignCreaterUpdaterErrorMessage.HasError | CampaignCreaterUpdaterErrorMessage.NameOrDisplaynameTooShort; 
    var x = (int)hatas; 

    for (int i=0; i<Enum.GetNames(typeof(CampaignCreaterUpdaterErrorMessage)).Length; i++) 
    { 
     int z = 1 << i; // create bit mask 

     if ((x & z) == z) // test mask against flags enum 
     { 
      Console.WriteLine(((CampaignCreaterUpdaterErrorMessage)z).ToString()); 
     } 
    } 

对于让潜在价值的尝试铸造:

Messagebox.Show(((int)hatas)ToString()); 

在你的榜样,是的ToString通过越来越对CampaignCreaterUpdaterErrorMessage枚举类型,返回枚举的字符串表示默认调用。

通过转换为枚举的基础默认类型int,您可以获得整数值的ToString。

+0

谢谢您的回答。但是MessageBox.Show((int)hatas);给我编译时错误如下;参数类型'int'不能分配给参数类型'string'。 –

+0

糟糕。固定。试试这个:'Messagebox.Show(((int)hatas)ToString());' –

+0

再次感谢,但现在它变得“3”了。我想要“HasError” - “NameOrDisplayNameTooShort”。类似的东西; “发现错误;应用程序HasError和NameOrDisplayNameTooShort”.... –

1

如下所示,需要将enum转换/ unbox为int。

(int)CampaignCreaterUpdaterErrorMessage.NoError 
(int)CampaignCreaterUpdaterErrorMessage.HasError 
+0

我不明白..你可以写一点太长的解释吗?,请... –

0

试试这个:

Messagebox.Show(CampaignCreaterUpdaterErrorMessage.NameOrDisplaynameTooShort);

+0

不错的尝试Charley14 :)但它不是答案。无论如何,感谢您回答这个问题...... –