我们正在处理一项网络服务,该网络服务需要向其发布5个字符串才能打印地址标签。在我们的服务器上,数据保存在一个数组中,以便在发送到Web服务之前对其进行处理。
我们有一个方法可以将multi0line TextBox
字符串(邮政地址)转换为正确的格式,如下所示:
Public Class PostageLabel
Public Property Address1 As String
Public Property Address2 As String
Public Property Address3 As String
Public Property Address4 As String
Public Property Address5 As String
End Class
Public Shared Function ConvertAddress(address As String) As PostageLabel
Dim labelFieldsAvailable As Integer = 5
' ...
End Function
labelFieldsAvailable
变量只是标签上Address
字段的数量(即Public String
类中存在的PostageLabel
属性的数量)。
正如您所看到的,我们在功能中手动设置此功能并不是很重要,但我想知道是否可以自动发现此值并避免潜在的错误(例如,如果标签格式永远变成6个领域)?
Dim labelFieldsAvailable As Integer = (Some wizardry to count property fields)
答案 0 :(得分:2)
您可以使用反射来使用GetProperties
获取PropertyInfo
。然后只需返回数组的Length
:
Dim l As Integer = GetType(PostageLabel).GetProperties().Length
或者,正如James Thorpe建议:为了完全安全,您可以使用lamdba表达式检查属性的名称是否以Address
开头:
Dim l as Integer = GetType(PostageLabel).GetProperties().Count(Function(p) p.Name.StartsWith("Address"))