我发现很少有新风格(对我来说)来定义来自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似乎更容易理解。
任何人都有一些建议如何决定?
答案 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与类的主要原因是当你需要值语义时 - 赋值/参数复制位而不是指针。根据我的经验,这是相当罕见的。除非你有令人信服的理由(而且你知道其中的区别),否则请选择一个班级。