如何根据属性过滤或查找属性

时间:2009-02-10 08:04:15

标签: .net vb.net reflection properties attributes

我有一个课程如下

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

我只需要处理那些具有特定属性的属性,例如: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 个答案:

答案 0 :(得分:2)

修改:更新了正确的VB GetType()电话:

If _Property.IsDefined(GetType(ShowInDisplayAttribute), True) Then

答案 1 :(得分:0)

除了能够使用扩展方法/ lambdas(在c#中)使其更好之外,没有比在每个可用属性上使用MemberInfo.IsDefined更简单的方法。