iT邦幫忙

0

Get Enum的問題

因為案子是承接先人的意志,所以一時無法消化,想請教各位大大做法

下面有一段 Enum

    public enum testGiftType
    {
        [EnumDescription("禮物1")]
        Introducer = 2,
        [EnumDescription("禮物2")]
        IntroducerBonus = 9,
        [EnumDescription("禮物3")]
        Presentee = 'K',
        [EnumDescription("禮物4")]
        PresenteeBonus = 'L'
    }

這邊會發現Enum的index裡面的型態有char也有int,導致於用Index去GetEnumDescription時會有些卡卡的
這邊附上code

//(stirng)giftType ---回傳的資料

GetEnumDescription((testGiftType)(int.TryParse(giftType, out tmp) ? tmp : char.Parse(giftType)));

//轉換方法
protected string GetEnumDescription<T>(T value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());
    EnumDescriptionAttribute[] attributes =
        (EnumDescriptionAttribute[])fi.GetCustomAttributes(typeof(EnumDescriptionAttribute), false);
    if ((attributes != null) && (attributes.Length > 0))
        return attributes[0].Description;
    else return value.ToString();
}

這邊是可以正常work,但我想把 giftType 轉換成 Enum 這段寫成一個轉換的方法,最後回傳Enum的資料,但不能確定來源是哪一種型態,不知道怎麼下手?

再麻煩各位高手提供方向

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
小魚
iT邦大師 1 級 ‧ 2019-05-10 19:36:17

其實enum可以接受的型態是int,
之所以可以這樣設定是因為char基本上包含在int裡面,
轉型成int會轉換成ASCII碼,
我下面做了一點測試,

int index = (int)testGiftType.Presentee;
Console.WriteLine(index);
Console.WriteLine(index == (int)testGiftType.Presentee);

得到的結果是

75
True

我要發表回答

立即登入回答