如何获取枚举变量的值?

时间:2012-05-23 13:12:11

标签: c#-4.0 enums

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

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...

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

3 个答案:

答案 0 :(得分: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());

在您的示例中,默认情况下会针对CampaignCreaterUpdaterErrorMessage枚举调用ToString,它返回枚举的字符串表示形式。

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

答案 1 :(得分:1)

您需要将枚举转换/取消装入int,如下所示。

(int)CampaignCreaterUpdaterErrorMessage.NoError 
(int)CampaignCreaterUpdaterErrorMessage.HasError 

答案 2 :(得分:0)

试试这个:

Messagebox.Show(CampaignCreaterUpdaterErrorMessage.NameOrDisplaynameTooShort);