?
Solved

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

Posted on 2008-06-12
6
Medium Priority
?
391 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
6 Comments
 
LVL 86

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
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 
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 86

Accepted Solution

by:
Mike Tomlinson earned 2000 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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

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…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
Suggested Courses

764 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