2

私の質問は、列挙型変数の値を取得するにはどうすればよいですか?

ここに画像の説明を入力 添付のスクリーンショットを見てください...「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...

どうもありがとうございました...

4

3 に答える 3

2

まず、列挙型でFlagsAttributeを使用する場合は、次のように2の累乗で値を定義する必要があります。

[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を取得します。

于 2012-05-23T13:14:57.053 に答える
1

次のように、列挙型を int にキャスト/ボックス化解除する必要があります。

(int)CampaignCreaterUpdaterErrorMessage.NoError 
(int)CampaignCreaterUpdaterErrorMessage.HasError 
于 2012-05-23T13:17:47.803 に答える
0

これを試して:

Messagebox.Show(CampaignCreaterUpdaterErrorMessage.NameOrDisplaynameTooShort);

于 2012-05-23T13:20:28.753 に答える