How to filter or find properties based on attribut

2019-04-16 18:09发布

I have a class as follows

Public Class Foo
    Private _Name As String
    <ShowInDisplay()> _
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Private _Age As String
    Public Property Age() As String
        Get
            Return _Age
        End Get
        Set(ByVal value As String)
            _Age = value
        End Set
    End Property

    Private _ContactNumber As String
    <ShowInDisplay()> _
    Public Property ContactNumber() As String
        Get
            Return _ContactNumber
        End Get
        Set(ByVal value As String)
            _ContactNumber = value
        End Set
    End Property
End Class

I just need to work on only those properties which has a specific attribute eg:ShowInDisplay

Public Sub DisplayOnlyPublic(ByVal Someobject As Foo)
    For Each _Property As something In Someobject.Properties
        If _Property.HasAttribute("ShowInDisplay") Then  
           Console.WriteLine(_Property.Name & "=" & _Property.value)
        End If
    Next
End Sub

2条回答
放我归山
2楼-- · 2019-04-16 19:00

Edit: Updated with correct VB GetType() call:

If _Property.IsDefined(GetType(ShowInDisplayAttribute), True) Then
查看更多
放我归山
3楼-- · 2019-04-16 19:09

With the exception of being able to make it nicer with extension methods / lambdas (in c# anyway), there is no simpler way than using MemberInfo.IsDefined on each of the available properties.

查看更多
登录 后发表回答