8
votes

Déterminez si la propriété est une liste générique via réflexion et des éléments de liste de boucles

Je bouconne toutes les propriétés d'un objet via réflexion:

For Each p As PropertyInfo In values.[GetType]().GetProperties()
    If p.CanRead Then
        'Do stuff
    End If  
Next


0 commentaires

4 Réponses :


-2
votes
if p.PropertyType = TypeOf List(Of T) then...

0 commentaires

13
votes

Essayez cette application de console complète. Désolé c'est en c #. xxx


0 commentaires

4
votes

Voici Roatines Réponse dans VB.NET, application de console complète

Imports System
Imports System.Reflection
Imports System.Collections.Generic
Imports System.Collections

Namespace ReflectionTest
    Public Class Object1
        Public Overloads Overrides Function ToString() As String
            Return "This is Object 1"
        End Function
    End Class
    Public Class Object2
        Public Overloads Overrides Function ToString() As String
            Return "This is Object 2"
        End Function
    End Class

    Public Class ContainerClass
        Public Property objects() As List(Of Object)
            Get
            End Get
            Set
            End Set
        End Property
        Public Property propA() As Integer
            Get
            End Get
            Set
            End Set
        End Property
        Public Property propB() As String
            Get
            End Get
            Set
            End Set
        End Property
        Public Property propC() As String()
            Get
            End Get
            Set
            End Set
        End Property
    End Class
    Class Program
        Shared Sub Main(args As String())
            ' Sample class instance
            Dim c As New ContainerClass()

            ' Add some sample data
            c.objects = New List(Of Object)()
            c.objects.Add(New Object1())
            c.objects.Add(New Object2())

            Dim props As PropertyInfo() = c.[GetType]().GetProperties()

            For Each p As PropertyInfo In props
                If GetType(IList).IsAssignableFrom(p.PropertyType) AndAlso p.PropertyType.IsGenericType Then
                    Dim item As IList = DirectCast(p.GetValue(c, Nothing), IList)
                    If item <> Nothing Then
                        For Each o As Object In item
                            Console.WriteLine(o.ToString())
                        Next
                    End If
                End If
            Next
            Console.ReadLine()
        End Sub


    End Class
End Namespace


2 commentaires

Euhhh, n'est-ce pas illégal de faire sur Stackoverflow ??


Juste essayer d'aider le gars dehors. J'ai utilisé converter.telerik.com



0
votes

Ici vous allez dans vb.net. (J'utilise .NET 4.5). Si votre objet d'origine est la liste (de T) avec nom variable = myData, alors xxx pre>

Code ci-dessus donne toutes les propriétés de la liste des myData. P>

boucle à travers les propriétés du Liste principale (myData) et souhaitez trouver si un seul bien lui-même est un type de liste, utilisez ci-dessous pour la boucle. Vous pouvez supprimer le chèque ISGenericType si non requis en fonction de votre besoin. P>

For Each iCol In CurCols
    Dim colType as Type = iCol.PropertyType
    If colType.IsGenericType AndAlso colType.GetGenericTypeDefinition = GetType(List(Of)) Then
        MsgBox(iCol.Name.ToString & " Is a List Type.")
    End If
Next


0 commentaires