449,453 Members | 1,437 Online Need help? Post your question and get tips & solutions from a community of 449,453 IT Pros & Developers. It's quick & easy.

# Set the value of a variable using a variable

 P: n/a There is probably a really easy way to do this, so please forgive me but I would like to set the value of a variable from a variable, an example would be... function Calculate_Something(ByVal multiplyer as integer, ByVal variable as ___?) variable = 5 * multiplyer end function What I would like this function to do is take the name of the incoming variable and assign a calculated value to it. Any help would be greatly appreciated, TIA!! Nov 20 '05 #1
10 Replies

 P: n/a My first post may not have been clear, here it is clarified a bit... function Calculate_Something(ByVal multiplyer as integer, ByVal name_of_variable as ___?) name_of_variable = name_of_variable * multiplyer end function Assuming that the variable I plug in to name_of_variable is an integer variable, I should be able to use this function to change the value of any variable I want. Or at least that is what I want to be able to do. "Blaxer" wrote: There is probably a really easy way to do this, so please forgive me but I would like to set the value of a variable from a variable, an example would be... function Calculate_Something(ByVal multiplyer as integer, ByVal variable as ___?) variable = 5 * multiplyer end function What I would like this function to do is take the name of the incoming variable and assign a calculated value to it. Any help would be greatly appreciated, TIA!! Nov 20 '05 #2

 P: n/a Assuming this is done within a class you could use reflection, have a look at FieldInfo.SetValue method hth guy "Blaxer" wrote: My first post may not have been clear, here it is clarified a bit... function Calculate_Something(ByVal multiplyer as integer, ByVal name_of_variable as ___?) name_of_variable = name_of_variable * multiplyer end function Assuming that the variable I plug in to name_of_variable is an integer variable, I should be able to use this function to change the value of any variable I want. Or at least that is what I want to be able to do. "Blaxer" wrote: There is probably a really easy way to do this, so please forgive me but I would like to set the value of a variable from a variable, an example would be... function Calculate_Something(ByVal multiplyer as integer, ByVal variable as ___?) variable = 5 * multiplyer end function What I would like this function to do is take the name of the incoming variable and assign a calculated value to it. Any help would be greatly appreciated, TIA!! Nov 20 '05 #3

 P: n/a Hi Blaxer, This is a typical sample of overloading \\\ Public Function calculate(ByVal variable As Double) As Double Return variable * 5 End Function Public Function calculate(ByVal variable As Integer) As Integer Return variable * 5 End Function /// I think that you can do it as well by sending and returning the variable as object, however that will not give you less lines of code and is very much less clean. I hope this helps? Cor Nov 20 '05 #4

 P: n/a I think this is what I need, but I am having trouble making heads or tails of it, how do I set the value of the variable using fieldinfo, it looks as if it only gets attributes ?? "guy" wrote: Assuming this is done within a class you could use reflection, have a look at FieldInfo.SetValue method hth guy "Blaxer" wrote: My first post may not have been clear, here it is clarified a bit... function Calculate_Something(ByVal multiplyer as integer, ByVal name_of_variable as ___?) name_of_variable = name_of_variable * multiplyer end function Assuming that the variable I plug in to name_of_variable is an integer variable, I should be able to use this function to change the value of any variable I want. Or at least that is what I want to be able to do. "Blaxer" wrote: There is probably a really easy way to do this, so please forgive me but I would like to set the value of a variable from a variable, an example would be... function Calculate_Something(ByVal multiplyer as integer, ByVal variable as ___?) variable = 5 * multiplyer end function What I would like this function to do is take the name of the incoming variable and assign a calculated value to it. Any help would be greatly appreciated, TIA!! Nov 20 '05 #5

 P: n/a I think this is what I need but I am having trouble making it work, I am pretty novice, do you know of any code examples that might help me? TIA "guy" wrote: Assuming this is done within a class you could use reflection, have a look at FieldInfo.SetValue method hth guy "Blaxer" wrote: My first post may not have been clear, here it is clarified a bit... function Calculate_Something(ByVal multiplyer as integer, ByVal name_of_variable as ___?) name_of_variable = name_of_variable * multiplyer end function Assuming that the variable I plug in to name_of_variable is an integer variable, I should be able to use this function to change the value of any variable I want. Or at least that is what I want to be able to do. "Blaxer" wrote: There is probably a really easy way to do this, so please forgive me but I would like to set the value of a variable from a variable, an example would be... function Calculate_Something(ByVal multiplyer as integer, ByVal variable as ___?) variable = 5 * multiplyer end function What I would like this function to do is take the name of the incoming variable and assign a calculated value to it. Any help would be greatly appreciated, TIA!! Nov 20 '05 #6

 P: n/a Hmm, I don't see how this will "modify" the value of any variable you send to it, am I just missing it? "Cor Ligthert" wrote: Hi Blaxer, This is a typical sample of overloading \\\ Public Function calculate(ByVal variable As Double) As Double Return variable * 5 End Function Public Function calculate(ByVal variable As Integer) As Integer Return variable * 5 End Function /// I think that you can do it as well by sending and returning the variable as object, however that will not give you less lines of code and is very much less clean. I hope this helps? Cor Nov 20 '05 #7

 P: n/a Hi Blaxer, Yes I am thinking that or maybe I miss something? How would you modify if you do not know what it has to be in your function? Cor Hmm, I don't see how this will "modify" the value of any variable you send to it, am I just missing it? "Cor Ligthert" wrote: Hi Blaxer, This is a typical sample of overloading \\\ Public Function calculate(ByVal variable As Double) As Double Return variable * 5 End Function Public Function calculate(ByVal variable As Integer) As Integer Return variable * 5 End Function /// I think that you can do it as well by sending and returning the variable as object, however that will not give you less lines of code and is very much less clean. I hope this helps? Cor Nov 20 '05 #8

 P: n/a The first question that really needs to be asked in this situation is: how do you plan to address the scoping issue? Based on your post, you're suggesting that you want to pass the name of a variable (Which implies that you want to pass it as a string) into your function (for reasons I am not wholly clear on.) But none the less, just the name of the variable is not super useful, since you provide no scoping context to go with it. This means that the only variables that you would be able to affect would be globally scoped ones. It's more than possible to have two variables with the same name in different scopes, and the only variables that stay in scope during a function call anyway are module globals, and just plain ol' global variables. However, if you already know the value of the variable, and know the name of the variable at design time (i.e. you're not trying to build this variable name at runtime) the you can use a pass by reference routine and pass the variable directly. For example: ----------------------- Sub Main() Dim TestVar as integer TestVar = 6 Console.Out.WriteLine(TestVar.ToString) Calculate_Something(7,TestVar) Console.Out.WriteLine(TestVar.ToString) End Sub Sub Calculate_Something(ByVal multiplyer as integer, ByRef InputVar as Integer) InputVar = InputVar * multiplyer End Sub ----------------------- Which yields the output (If compiled in a command line application): 6 42 Note: There are two important things here. Number one, it is NOT a function. This is a subroutine with a special thing called a side effect. And number two, the value is passed ByRef. ByRef tells the compiler that you want to pass the variable itself to the function, not a copy of the variable (Be careful here, with reference types, ByVal still passes a copy of the variable, but the variable itself is really just a pointer, so edits made to the value of a reference type's members even when passed ByVal are actually made to the variable itself.) This will allow you to change the value of the variable from within the subroutine. However, this can make code maintenance difficult, so make sure to clearly document your use of side effects. Also, in your originally proposed Calculate_Something, since it doesn't really need to produce a side effect the following code snippet would be far simpler to use: ----------------------- Sub Main() Dim TestVar as integer TestVar = 6 Console.Out.WriteLine(TestVar.ToString) TestVar = Calculate_Something(7,TestVar) Console.Out.WriteLine(TestVar.ToString) End Sub Function Calculate_Something(ByVal multiplyer as integer, ByVal InputVar as Integer) as Integer Return InputVar * multiplyer End Function ----------------------- This method is especially appealing as it allows you to either reassign the input variable (without the use of side effects) as well as assign a new variable or use it in a larger expression like: TestVar = 72+Math.Abs(TestVar)+Calculate_Something(15,TestVa r) Hope this helps. -- Signed, John-Michael O'Brien Student, Urban Drainage and Flood Control District "Blaxer" wrote in message news:4F**********************************@microsof t.com... My first post may not have been clear, here it is clarified a bit... function Calculate_Something(ByVal multiplyer as integer, ByVal name_of_variable as ___?) name_of_variable = name_of_variable * multiplyer end function Assuming that the variable I plug in to name_of_variable is an integer variable, I should be able to use this function to change the value of any variable I want. Or at least that is what I want to be able to do. Nov 20 '05 #9

 P: n/a Hi Blaxer, Now I see what you try to do, VBNet is not a scripting language so a variable name is nothing more than a mnemonic for the programmer what stends for an adres. You can try to simulate a scripting language, however it is easier to create a table, array or whatever where you hold the name of that variable. In your routine you can than decide based on that table what is the action you want to take. Just my though, Cor Nov 20 '05 #10

 P: n/a Below is a code segment that would execute your intended behavior. However, the nature of this application is difficult to maintain. It also requires reflection security clearance. I should note that this application could be easily rewritten using ByRef, but I would assume that based on your response you are dynamically building the variable name at runtime (For example loading the var names from a file or some such runtime only approach.) Keep in mind - reflection is not for the squeamish. You really shouldn't just jump into it without first fully understanding the nature of the problem. And when using it to override the normal variable access methods, understand that it is VERY slow and difficult to debug. Only consider using reflection this way as a last resort. ---------- Public Class DemonstrationClass 'Declare the variables we want to be able to change. Public FirstVar As Integer Public SecondVar As Integer Public ThirdVar As Integer Public Sub AlterVar(ByVal Multiplier As Integer, ByVal VarName As String) 'Get a reference to the variable we want to change Dim TargetFieldInfo As Reflection.FieldInfo = Me.GetType.GetField(VarName) Dim OldValue As Integer Dim NewValue As Integer 'Get the old value from ourselves (me) and cast it from Object to Integer OldValue = CType(TargetFieldInfo.GetValue(Me), Integer) 'Calculate the new value. NewValue = OldValue * Multiplier 'And then reassign the new value to our instance of DemonstrationClass. TargetFieldInfo.SetValue(Me, NewValue) End Sub Public Sub Go() Dim TargetName As String Dim tmpMultString As String Dim tmpMultiplier As Integer 'Initalize our three variables. FirstVar = 10 SecondVar = 20 ThirdVar = -10 'Display the current state. Console.Out.WriteLine("Before AlterVar") Console.Out.WriteLine("FirstVar: " + FirstVar.ToString) Console.Out.WriteLine("SecondVar: " + SecondVar.ToString) Console.Out.WriteLine("ThirdVar: " + ThirdVar.ToString) Console.Out.WriteLine() 'Prompt the user for the var name. Console.Out.Write("Which Var do you want to change? ") TargetName = Console.In.ReadLine() 'Prompt the user for the multiplier. Console.Out.Write("What do you want to multiply it by? ") tmpMultString = Console.In.ReadLine() 'And get the integer value of what they entered tmpMultiplier = Integer.Parse(tmpMultString) 'Call our routine. AlterVar(tmpMultiplier, TargetName) 'And redisplay the state. Console.Out.WriteLine("After AlterVar") Console.Out.WriteLine("FirstVar: " + FirstVar.ToString) Console.Out.WriteLine("SecondVar: " + SecondVar.ToString) Console.Out.WriteLine("ThirdVar: " + ThirdVar.ToString) Console.Out.WriteLine() 'Get one char from the buffer (Which won't be populated till the user presses anyway.) Console.Out.WriteLine("Press Enter to Continue.") Console.In.Read() End Sub Public Shared Sub Main() Dim MyDemoClass As New DemonstrationClass MyDemoClass.Go() MyDemoClass = Nothing End Sub End Class ---------- Below is a sample run of the program (remember, spelling and case are IMPORTANT): ---------- Before AlterVar FirstVar: 10 SecondVar: 20 ThirdVar: -10 Which Var do you want to change? FirstVar What do you want to multiply it by? 22 After AlterVar FirstVar: 220 SecondVar: 20 ThirdVar: -10 Press Enter to Continue. ---------- Hope this helps. ^.^ -- Signed, John-Michael O'Brien Student, Urban Drainage and Flood Control District "Blaxer" wrote in message news:EE**********************************@microsof t.com... Wow, thank you for such a thorough reply, unfortunatly I cannot see how this helps me. Maybe I am not explaining what I need in enough detail or maybe it is not possible to do this...? To answer your question, yes the variables (there are 3 of them) are available to the entire class (global). All I need to be able to do is pass the name of the variable as a string to a function so that it's value can be updated. Is that possible? Nov 20 '05 #11

### This discussion thread is closed

Replies have been disabled for this discussion. 