none
Parcours des propriétés d'un objet RRS feed

  • Question

  • Bonjour,

    En Javascript, il existe une instruction "for...in" pour parcourir les propriétés d'un objet.
    Existe t-il un équivalent en .Net ?
    Cela pourrait être plutôt pratique pour les classes possédant beaucoup de propriétés.

    Merci d'avance.
    jeudi 31 janvier 2008 11:55

Toutes les réponses

  • Oui, il suffit d'utiliser la boucle For Each sur les éléments de ta collection, tu vas voir, tu vas vouloir l'utiliser partout!

    jeudi 31 janvier 2008 12:27
    Modérateur
  • Bonjour et merci de votre réponse.

    Cependant, je ne cherchais pas à parcourir une collection d'objet, mais ses propriétés.

    Je m'explique un peu plus. Soit l'extrait de code suivant :

    Code Snippet

    Public Class User
        (...)
        Public Overridable Property Nom() As String
            Get
                Return _Nom
            End Get
            Set(ByVal value As String)
                _Nom = value
            End Set
        End Property

        Public Overridable Property Prenom() As String
            Get
                Return _Prenom
            End Get
            Set(ByVal value As String)
                _Prenom = value
            End Set
        End Property

        Public Overridable Property Adresse() As String
            Get
                Return _Adresse
            End Get
            Set(ByVal value As String)
                _Adresse = value
            End Set
        End Property
    End Class


    Je souhaiterais donc savoir s'il est possible sur un objet de classe User, de faire une boucle sur les propriétés Nom, Prenom, Adresse, plutôt que de retaper à chaque fois User.Nom, User.Prenom, User.Adresse.

    Merci d'avance !

    jeudi 31 janvier 2008 14:37
  • Maintenant je comprend mieux, mais je n'ai pas trouver de solution à ce problème, je ne sais pas si tu pourrais utilisé Reflection pour cela?

     

    Je ne sais pas si quelqu'un d'autres aurait une idée pour cela...

    jeudi 31 janvier 2008 15:04
    Modérateur
  • J'avais pensé à la Réflection mais ça me semblait un peu compliqué pour un simple parcours de propriétés.
    Ceci dit, s'il n'y a rien d'autre...


    Merci de votre réponse quoiqu'il en soit.
    vendredi 1 février 2008 09:59
  • Bonsoir,


    Je ne suis pas sûr d'avoir compris et je ne sais pas si c'est cela que tu cherche mais si tu veux afficher la valeur des 3 propriétés d'un coup tu peux substituer la méthode ToString() de ta classe.
    mercredi 6 février 2008 20:15
  • Bonjour,

     

    j'ai écrit un petit bout de code qui pourrait vous aider :

     

    Imports System.Reflection

    Public Class Form1

    Private Sub LancerBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LancerBtn.Click

    Dim a As Assembly = Assembly.GetExecutingAssembly()

    FullNameTxt.Text = a.FullName

    LocationTxt.Text = a.Location

    ReflectionOnlyChk.Checked = a.ReflectionOnly

    Dim ArrayTypes() As Type = a.GetTypes()

    TypesLst.Items.Clear()

    ModulesLst.Items.Clear()

    MessageBox.Show(ArrayTypes.GetLength(0).ToString(), "GetTypes()")

    For i As Integer = 0 To ArrayTypes.GetLength(0) - 1

    TypesLst.Items.Add(ArrayTypes(i).FullName)

    Next

    Dim modules() As [Module] = a.GetModules()

    For i1 As Integer = 0 To modules.GetLength(0) - 1

    ModulesLst.Items.Add(modules(i1).Name)

    Next

    Dim t As Type = GetType(Module1.User)

    MessageBox.Show(t.GetProperties.GetLength(0).ToString(), t.Name)

    PropertiesLst.Items.Clear()

    For Each prop As PropertyInfo In t.GetProperties()

    PropertiesLst.Items.Add(prop.Name & " " & prop.PropertyType.ToString())

    Next

    End Sub

    End Class

     

    ainsi que :

    Module Module1

    Public Class User

    Private _Nom As String

    Public Overridable Property Nom() As String

    Get

    Return _Nom

    End Get

    Set(ByVal value As String)

    _Nom = value

    End Set

    End Property

    Private _Prenom As String

    Public Overridable Property Prenom() As String

    Get

    Return _Prenom

    End Get

    Set(ByVal value As String)

    _Prenom = value

    End Set

    End Property

    Private _Adresse As String

    Public Overridable Property Adresse() As String

    Get

    Return _Adresse

    End Get

    Set(ByVal value As String)

    _Adresse = value

    End Set

    End Property

    End Class

     

     

    End Module

     

    Essayez je crois que vous avez ce que vous voulez avec System.Reflection

     

    Attention, il faut ne pas oublier l'Imports System.Reflection

     

    Bonne journée

    vendredi 8 février 2008 14:07
  • Merci de votre réponse détaillée !

    Je vais tester ce code.
    vendredi 15 février 2008 10:34