• Visitors can check out the Forum FAQ by clicking this link. You have to register before you can post: click the REGISTER link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. View our Forum Privacy Policy.
  • Want to receive the latest contracting news and advice straight to your inbox? Sign up to the ContractorUK newsletter here. Every sign up will also be entered into a draw to WIN £100 Amazon vouchers!

Discovering a .net objects properties

Collapse
X
  •  
  • Filter
  • Time
  • Show
Clear All
new posts

    Discovering a .net objects properties

    Any pointer as to the easiest way to obtain a list of proptery names and values that are implemented in a .NET object. Basically all I want to is poulate a grid with the names and properties. Obviously I can write specific code for it but I have a load of different object so wanted to do something generic.

    Object.GetType.GetProperties gets me an array of PropertyInfo.

    PropertyInfo.Name gets me the name, .CanRead whther or not I can read it and .GetValue the value. What confuses me is how I deal with properties that have parameters. Can't seem to find anything too obvious on MSDN, but then I can only even find info I already know the answer to there.

    #2
    I presume you mean something declared like this:

    Public Property TheProperty(ByVal theIndex as Integer, ByVal theValue As String) As String


    I take it you are using VB.Net as C# doesnt seem to accept paramaterised properties per se; its possible with an indexer as a workaround, but you can only have one indexer per class in C#.

    Look at ParameterInfo, and PropertyInfo.GetIndexProperties. The ParameterInfo has a Position property and this might help you build the correct array of Objects to pass in the third paramater of the SetValue mthod.
    Last edited by mcquiggd; 26 March 2006, 10:58.
    Vieze Oude Man

    Comment


      #3
      Cheers, that should get me on the right track.

      Comment


        #4
        Heres a version in VB.Net to set the value of a Property that is a string Array
        and accepts an Index as a paramater:


        Imports System.Reflection

        Public Class TargetClass

        Private _theArray(10) As String

        Public Property MyProp(ByVal theIndex As Integer)
        Get
        Return (_theArray(theIndex))
        End Get
        Set(ByVal Value)
        _theArray(theIndex) = Value
        End Set
        End Property

        End Class


        Public Class PropertyUpdater

        Public Sub SetProperties(ByRef targetObject As Object, ByVal index() As Object, ByVal newValue As String)

        Dim targetType As Type = targetObject.GetType
        Dim props() As PropertyInfo
        Dim prop As PropertyInfo

        props = targetType.GetProperties

        For Each prop In props

        prop.SetValue(targetObject, newValue, index)

        Next

        End Sub

        End Class

        This would be called by:

        Private targetObject As New TargetClass
        Private updater As New PropertyUpdater
        Private the index as Integer

        theIndex = Integer.Parse(TextBoxIndex.Text)

        updater.SetProperties(targetObject, New Object() {theIndex}, TextBoxNewValue.Text)

        TextBoxCurrentValue.Text = targetObject.MyProp(theIndex)




        Obviously you wouldnt really loop through all the PropertyInfos, you would just use GetProperty instead of GetProperties but you get the picture...
        Vieze Oude Man

        Comment


          #5
          Cheers.

          Comment

          Working...
          X