Pergunta

Sou novo em atributos personalizados, por isso estou me perguntando se é possível obter os valores dos atributos. Um exemplo das propriedades da minha classe que eu uso os atributos personalizados é:

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

Estou tentando obter os valores desses atributos (ou seja, obtenha a posição = 378, comprimento = 34, etc.). O loop com o qual eu estava começando se parece com o seguinte:

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

Isso me dá os nomes de todos os atributos, mas não tenho certeza de como obter os valores. Alguma ideia?

Saúde,

Ryan

Foi útil?

Solução

Você precisará saber o tipo de atributo.

Por exemplo:

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

A propósito, você não precisa criar um novo ClientGWLImport Para conseguir Type objeto.
Em vez disso, você pode escrever

Dim properties() As PropertyInfo = GetType(ClientGWLImport).GetProperties()

Outras dicas

o System.Reflection.Customattributedata A classe expõe a funcionalidade para recuperar a definição completa de atributos personalizados para decorar um tipo ou membro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top