我正在寻找一种比我要呈现的更清晰的方式来限制字符串属性的可能值。假设我有一个具有“Direction”属性的类
Public Class Location
Private _Direction As String
Public Property Direction() As String
Get
Return _Direction
End Get
Set(ByVal value As String)
_Direction = value
End Set
End Property
End Class
所以假设我想将方向的可能值限制为“北”,“南”,“东方”和“西方”。我意识到我可以做这样的事情:
Public Class Location
Private ValidDirection As New Collection
Public Sub New
ValidDirection.Add("1", "North")
...
End Sub
Private _Direction As String
Public Property Direction() As String
Get
Return _Direction
End Get
Set(ByVal value As String)
If Me.ValidDirection.Contains(value) Then
_Direction = value
Else
Throw New Exception("Invalid direction.")
End If
End Set
End Property
End Class
但如果我碰巧创建了很多Location
s,那么我就一遍又一遍地创建了这个集合。对于这个例子来说,这不是什么大问题,但假设我有5种或更多属性的25种可能性,并且我创建了数百或数千Location
s,然后它开始累加。
有没有更好的方法来实现这一目标?
我还应该注意,为了防止事情变得复杂,我想在某些情况下将输入转换为可接受的值。例如,使用“N”,我想自动将其转换为“North”。
有什么想法吗?
答案 0 :(得分:3)
正如Plutonix所建议的那样,您应该定义一个枚举:
Public Enum Direction
North
South
East
West
End Enum
您现在将属性声明为该类型。您几乎肯定已经使用了许多枚举,例如: DialogResult
返回的ShowDialog
以及MessageBox.Show
使用的Dock
。您可能在WinForms设计器中使用了一些数字,例如对于表单和控件的Anchor
和Style
属性,ProgressBar
的{{1}}属性和DropDownStyle
的{{1}}。
请注意,值由引擎盖下的数字表示 - ComboBox
值默认情况下从零开始 - 调用Integer
的结果将为您提供名称。如果您需要名称以外的其他内容,例如:你需要包含空格,然后你可以应用ToString
属性并编写一些简单的代码来实现它。