Solved

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

Posted on 2008-06-12
6
388 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
ID: 21771919
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
ID: 21772164
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
ID: 21772180
If it is a class field, like in Idle_Mind example, then it is possible, but with local variables, not possible.
0
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
LVL 1

Author Comment

by:ofern01
ID: 21774429
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
ID: 21774659
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
ID: 31466534
Thanks for you fast and accruate response
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It’s quite interesting for me as I worked with Excel using vb.net for some time. Here are some topics which I know want to share with others whom this might help. First of all if you are working with Excel then you need to Download the Following …
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

829 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