Solved

How to get Reference to a Varible by Name (String)

Posted on 2008-06-12
6
385 Views
Last Modified: 2013-11-26
VS 2008
I have a form that has a combobox with the list of variable names available to the user. The user selects the one he needs and with that name, I need to return or show the value in that Variable. Here is an abstract sample of what I need.

Public class Test1
  Private mvar1 as String = "Value 1"
  Private mvar2 as decimal = 23.54
  Private oview as DataView = New Dataview()
 
  Public function GetVarValue(byval VarName as String) as Object
     dim ReturnVal as Object = Nothing

     ' do something here to get the value. This is what I need
    '  ReturnVal = GetVarRef(VarName).Text
    '  ReturnVal = GetViewRef(VarName).rows(0)("field1")
    return ReturnVal
End Function
End Class


From Another Class I want to call that Function and Get the Object Value Like
Dim Obj as Object = Test1.GetVarValue("mvar1")

0
Comment
Question by:ofern01
  • 2
  • 2
  • 2
6 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
Comment Utility
So something like this:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim t1 As New Test1
        MessageBox.Show(t1.GetVarValue("mvar1"))
        MessageBox.Show(t1.GetVarValue("mvar2"))
    End Sub

    Public Class Test1

        Private mvar1 As String = "Value 1"
        Private mvar2 As Decimal = 23.54

        Public Function GetVarValue(ByVal VarName As String) As Object
            Try
                Dim fi As System.Reflection.FieldInfo = Me.GetType.GetField(VarName, Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Public)
                Return fi.GetValue(Me)
            Catch ex As Exception
                Return Nothing
            End Try            
        End Function

    End Class
0
 
LVL 18

Expert Comment

by:Priest04
Comment Utility
It is not possible to get the name of the local variable, since its name is not compiled into assembly's metadata, therefore it is not available at runtime.

You may want to try some alternative method, like having a collection that will based on the key (variable name entered by user) retrieve varable value. This would mean that you would need to hardcode adding an element in collection for each variable you have declared.

Goran
0
 
LVL 18

Expert Comment

by:Priest04
Comment Utility
If it is a class field, like in Idle_Mind example, then it is possible, but with local variables, not possible.
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 1

Author Comment

by:ofern01
Comment Utility
Idle Mind, That will resolve the Variable Values, Thank you, but what about the view. For this I need to return a reference so that I can Manipulate the view info. The view can also be a DataTable.

Priest04, I do not undertand you comment about class field or variables. As far as I know, Idle Mind is using variables, if not, what is the diference?
0
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
Comment Utility
You can use it for whatever you want...just make sure you have the right type and cast it:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim t1 As New Test1

        Dim o As Object = t1.GetVarValue("oview")

        If Not (o Is Nothing) Then

            If TypeOf o Is DataView Then

                Dim dv As DataView = DirectCast(o, DataView)

                 ' ...do something with "dv"...

            End If

        End If

    End Sub
 

    Public Class Test1
 

        Private mvar1 As String = "Value 1"

        Private mvar2 As Decimal = 23.54

        Private oview As DataView = New DataView()
 

        Public Function GetVarValue(ByVal VarName As String) As Object

            Try

                Dim fi As System.Reflection.FieldInfo = Me.GetType.GetField(VarName, Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Public)

                Return fi.GetValue(Me)

            Catch ex As Exception

                Return Nothing

            End Try

        End Function
 

    End Class

Open in new window

0
 
LVL 1

Author Closing Comment

by:ofern01
Comment Utility
Thanks for you fast and accruate response
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Recently while returning home from work my wife (another .NET developer) was murmuring something. On further poking she said that she has been assigned a task where she has to serialize and deserialize objects and she is afraid of serialization. Wha…
Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now