Vb.net 性能枚举与类?

Vb.net 性能枚举与类?,vb.net,Vb.net,我发现很少有新样式(对我来说)可以“定义”select查询的输出 Private Enum Item ID Item Description End Enum Private Class Item Private ID as String Private Item as String Private Desc as String End Class 我正在考虑使用其中的任何一种。通过使用类,我不需要在显示之前重新转换元素类型。

我发现很少有新样式(对我来说)可以“定义”select查询的输出

Private Enum Item
    ID
    Item
    Description
End Enum


    Private Class Item
    Private ID as String
    Private Item as String
    Private Desc as String
    End Class
我正在考虑使用其中的任何一种。通过使用类,我不需要在显示之前重新转换元素类型。但Enum似乎更容易理解

有人对如何决定有什么建议吗?

枚举成员是数字的(通常是整数,但可以是长的)。但它们不是可变的,在运行时也不会改变。因此,您的枚举等于:

Private Enum Item
    ID = 0
    Item = 1
    Description = 2
End Enum
如果希望描述为字符串,则最好使用类。枚举用于引用或索引某物或限制/定义选择。比如:

Public Property Stooge As Stooges

Friend Enum Stooges
    Larry
    Moe
    Curly
    Shemp
    CurlyJoe
End Enum
Stooge属性必须是这些值之一。在代码中,它将显示文本(“moe”),但存储和整数(1)。用户将在下拉列表中显示文本等


您可以将描述与枚举常量关联起来:

Public Enum Stooges
    <Description("Larry - Funny one")> Larry
    <Description("Moe - 'Smart' One")> Moe
    <Description("Curly - Sore One")> Curly
    <Description("Shemp - One with bad haircut")> Shemp
    <Description("CurlyJoe - Last one")> CurlyJoe
End Enum
用法:
str=enumHelper.GetDescription(Stooge.Moe)
(enumHelper是静态/共享函数所在的CALS的名称)

要获取所有描述的字符串数组,请执行以下操作:

Public Shared Function GetDescriptions(ByVal type As Type) As String()
    Dim n As Integer = 0
    Dim enumValues As Array

    Try
        enumValues = [Enum].GetValues(type)
        Dim Descr(enumValues.Length - 1) As String

        For Each value As [Enum] In enumValues
            Descr(n) = GetDescription(value)
            n += 1
        Next
        Return Descr

    Catch ex As Exception
        MessageBox.Show(ex.Message)
        Return Nothing
    End Try

End Function

用法:
Dim strengum As String()=enumHelper.GetDescriptions(GetType(Stooges))
从您的问题中,您真正的意思是结构与类。我默认创建一个类。与类相比,使用结构的主要原因是当您需要值语义时——赋值/参数复制位,而不是指针。这在我的经验中是相当罕见的。除非你有令人信服的理由(而且你知道其中的区别),否则就去上课。

苹果和橘子。作为枚举,Item.ID将仅为整数。如果你想要一个字符串,那么就使用一个类,但是这些成员可能应该是属性(并且
Friend
,除非类外的任何东西都不能读写它们)。好的一点,我没有注意到他可能指的是Struct而不是Enum
Public Shared Function GetDescriptions(ByVal type As Type) As String()
    Dim n As Integer = 0
    Dim enumValues As Array

    Try
        enumValues = [Enum].GetValues(type)
        Dim Descr(enumValues.Length - 1) As String

        For Each value As [Enum] In enumValues
            Descr(n) = GetDescription(value)
            n += 1
        Next
        Return Descr

    Catch ex As Exception
        MessageBox.Show(ex.Message)
        Return Nothing
    End Try

End Function