Performance Enum vs class?

时间:2014-02-11 02:15:22

标签: vb.net

我发现很少有新风格(对我来说)来定义来自select query的输出。

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似乎更容易理解。

任何人都有一些建议如何决定?

2 个答案:

答案 0 :(得分:2)

枚举成员是数字(通常是整数,但可以很长)。但它们不是变量,不会在运行时更改。所以你的枚举等同于:

Private Enum Item
    ID = 0
    Item = 1
    Description = 2
End Enum

如果你想让Description成为一个字符串,那么一个类是个更好的主意。枚举用于引用或索引某些内容或限制/定义选择。像:

Public Property Stooge As Stooges

Friend Enum Stooges
    Larry
    Moe
    Curly
    Shemp
    CurlyJoe
End Enum

Stooge Property必须是其中一个值。在代码中它将显示文本(“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

获取单个描述:

Public Shared Function GetDescription(ByVal EnumConstant As [Enum]) As String
    Dim fi As Reflection.FieldInfo = 
              EnumConstant.GetType().GetField(EnumConstant.ToString())

    Dim attr() As DescriptionAttribute =
           DirectCast(fi.GetCustomAttributes(GetType(DescriptionAttribute), 
           False), DescriptionAttribute())

    If attr.Length > 0 Then
        Return attr(0).Description
    Else
        Return EnumConstant.ToString()   ' return enum name if no Descr
    End If
End Function

用法:str = enumHelper.GetDescription(Stooge.Moe)(enumHelper是静态/共享函数所在的calss的名称)。

获取所有描述的字符串数组:

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 strEnum As String() = enumHelper.GetDescriptions(GetType(Stooges))

答案 1 :(得分:1)

从你的问题来看,你真正的意思是结构与阶级。我会默认创建一个类。使用struct与类的主要原因是当你需要值语义时 - 赋值/参数复制位而不是指针。根据我的经验,这是相当罕见的。除非你有令人信服的理由(而且你知道其中的区别),否则请选择一个班级。