沒(méi)有辦法直接取枚舉名,只能根據(jù)枚舉值,自己賦值
10年積累的做網(wǎng)站、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有密山免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
Private Enum duihuaA As Integer
第一個(gè)
第二個(gè)
第三個(gè)
第四個(gè)
第五個(gè)
第六個(gè)
第七個(gè)
第八個(gè)
End Enum
調(diào)用:
Select case X
case duihuaA.第一個(gè)
Return "第一個(gè)"
case duihuaA.第二個(gè)
Return "第二個(gè)"
..............
Enum Week
周日 = 0
周一 = 1
周二 = 2
周三 = 3
周四 = 4
周五 = 5
周六 = 6
End Enum
Sub Main()
Dim myType As Type = GetType(Week)
MsgBox(Week.GetName(myType, Week.周二))
End Sub
枚舉的值只能是整數(shù),但是枚舉常量的名字本身就是字符串啊,舉例:
Private Enum weekdays
星期日 = 0
星期一
星期二
星期三
End Enum
然后:
MsgBox(weekdays.星期日) '顯示0
MsgBox(weekdays.星期日.ToString) '顯示星期日
這個(gè)功能實(shí)現(xiàn)起來(lái)其實(shí)也很簡(jiǎn)單,就是通過(guò)反射去讀取 DescriptionAttribute 的 Description 屬性的值,代碼如下所示:
/// summary
/// 返回枚舉項(xiàng)的描述信息。
/// /summary
/// param name="value"要獲取描述信息的枚舉項(xiàng)。/param
/// returns枚舉想的描述信息。/returns
public static string GetDescription(Enum value)
{
Type enumType = value.GetType();
// 獲取枚舉常數(shù)名稱。
string name = Enum.GetName(enumType, value);
if (name != null)
{
// 獲取枚舉字段。
FieldInfo fieldInfo = enumType.GetField(name);
if (fieldInfo != null)
{
// 獲取描述的屬性。
DescriptionAttribute attr = Attribute.GetCustomAttribute(fieldInfo,
typeof(DescriptionAttribute), false) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
這段代碼還是很容易看懂的,這里取得枚舉常數(shù)的名稱使用的是 Enum.GetName() 而不是 ToString(),因?yàn)榍罢吒欤覍?duì)于不是枚舉常數(shù)的值會(huì)返回 null,不用進(jìn)行額外的反射。
當(dāng)然,這段代碼僅是一個(gè)簡(jiǎn)單的示例,接下來(lái)會(huì)進(jìn)行更詳細(xì)的分析。