VB.net Значения пользовательских атрибутов - PullRequest
2 голосов
/ 21 декабря 2009

Я новичок в пользовательских атрибутах, поэтому мне интересно, возможно ли получить значения атрибутов. Пример свойств в моем классе, которые я использую пользовательские атрибуты:

Private mFiller As String
<Position(378), Length(34), DataType("A"), ParticipantDependant("P/D"), RequiredProperty("Required"), Format("Blank")> _
Public Property Filler() As String
   Get
      Return mFiller
   End Get
   Set(ByVal value As String)
      mFiller = value
   End Set
End Property

Я пытаюсь получить значения этих атрибутов (т.е. получить Положение = 378, Длина = 34 и т. Д.). Цикл, с которого я начинал, выглядит следующим образом:

Dim gwlImport As New ClientGWLImport
Dim properties() As PropertyInfo = gwlImport.GetType.GetProperties
Dim tmpInfo As PropertyInfo
For Each tmpInfo In properties
   Debug.Print("Attributes for : " & tmpInfo.Name)
   For Each tmpAttribute As Object In tmpInfo.GetCustomAttributes(True)
      Debug.Print(tmpAttribute.ToString)
   Next tmpAttribute
Next tmpInfo

Это дает мне имена всех атрибутов, но я не уверен, как получить значения. Есть идеи?

Приветствия

Ryan

Ответы [ 2 ]

5 голосов
/ 21 декабря 2009

Вам нужно будет знать тип атрибута.

Например:

Dim posAtt As PositionAttribute 
posAtt = CType(tmpInfo.GetCustomAttributes(GetType(PositionAttribute), True)(0), PositionAttribute)
'Use some property of posAtt

Кстати, вам не нужно создавать новый ClientGWLImport, чтобы получить его Type объект.
Вместо этого вы можете написать

Dim properties() As PropertyInfo = GetType(ClientGWLImport).GetProperties()
0 голосов
/ 21 декабря 2009

Класс System.Reflection.CustomAttributeData предоставляет функциональные возможности для получения полного определения пользовательских атрибутов, украшающих тип или член.

...