Как отфильтровать или найти свойства на основе атрибутов - PullRequest
0 голосов
/ 10 февраля 2009

У меня есть класс следующим образом

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 ]

2 голосов
/ 10 февраля 2009

Редактировать : Обновлено с правильным VB GetType() вызов:

If _Property.IsDefined(GetType(ShowInDisplayAttribute), True) Then
0 голосов
/ 10 февраля 2009

За исключением возможности сделать его более приятным с помощью методов расширения / лямбды (в любом случае в c #), нет более простого способа, чем использование MemberInfo.IsDefined для каждого из доступных свойств.

...