2014-01-17 60 views
2

開頭我面臨一個我已經構建的枚舉的問題。枚舉成員列表以數字

Public Enum enumGraphType 
    Table = 0 
    Chart = 1 
    Gauge = 2 
    3DChart = 3 
    End Enum 

我得到一個3DChart錯誤:語句不能出現在一個枚舉體內。假設Enum結束。
我知道我可以使用名稱D3Chart,但這不是我想要的。
此外,我知道我可以添加一個屬性(如說明),並將我的描述作爲3DChart,但這不是我想要的。
此外,我試過[3DChart],它不起作用。
有什麼辦法可以解決這個問題並保留名稱?

謝謝您的時間

回答

2

枚舉成員不能以數字開頭,所以這是無效的:

3DChart = 3 

你可以在前面加上一個下劃線代替

_3DChart = 3 

對於它的價值,您可以添加說明:

Public Enum EnumGraphType 
    <ComponentModel.Description("Table")> 
     Table = 0 
    <ComponentModel.Description("Chart")> 
     Chart = 1 
    <ComponentModel.Description("Gauge")> 
     Gauge = 2 
    <ComponentModel.Description("3DChart")> 
     _3DChart = 3 
End Enum 

這裏是一個枚舉的擴展,它返回它:

Public Module EnumExtensions 
    <Runtime.CompilerServices.Extension()> 
    Public Function GetDescription(ByVal EnumConstant As [Enum]) As String 
     Dim fi As Reflection.FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString()) 
     Dim attr() As ComponentModel.DescriptionAttribute = 
      DirectCast(_ 
       fi.GetCustomAttributes(GetType(ComponentModel.DescriptionAttribute), False), _ 
       ComponentModel.DescriptionAttribute() _ 
      ) 
     If attr.Length > 0 Then 
      Return attr(0).Description 
     Else 
      Return EnumConstant.ToString() 
     End If 
    End Function 
End Module 

現在你會得到這樣的描述:

Dim chartType = EnumGraphType._3DChart 
Dim chartTypeDesc = chartType.GetDescription() ' 3DChart 
+0

這就是我的想法,但我希望的東西更聰明。謝謝Tim – Nianios

+0

@Nianios:你可以有一個Enum成員前綴,比如'gt'(GraphType),然後把你的數字放在後面。 – Neolisk

+0

@Nianios:我編輯了我的答案,以提供另一種使用描述的方式。 –