Рассмотрим следующий код:
Dim S1 As String = "a"
'this is the string in a file
Dim StringFromFile As String = "S1=hello"
Dim temp() As String = Split(StringFromFile, "=", -1, CompareMethod.Binary)
'temp(0) = variable name
'temp(1) = variable value
'my question is: how to assign value to S1?
Я объявил строку с именем S1. Теперь я хочу присвоить новое значение S1. Новое строковое значение сохраняется в файле в следующем формате :[имя переменной][= в качестве разделителя][строковое значение] . Как присвоить значение S1 после получения имени и значения строковой переменной, которые хранятся в файле?
ПРИМЕЧАНИЕ:
temp(0) = "S1"
temp(1) = "hello"
Следует отметить, что строка с данными исходит из файла, который может время от времени меняться! Когда файл изменяется, я хочу, чтобы переменные также менялись.
Мне нужен фрагмент кода, который при обработке такой строки, как "S1=hello", код сначала найдет объявленную переменную (, т.е. S1 ), а затем присвоит переменную S1 со строкой «привет». "=" просто действовал как разделитель для имени переменной и значения переменной.
ОБНОВЛЕНИЕ:
Моя попытка использовать пример Mathias Lykkegaard Lorenzen EDIT 2, но потерпела неудачу с "NullReferenceException" в этой строке "Field.SetValue(Me, VariableValue)"
. Пожалуйста, помогите мне решить проблему. Ниже приведен мой код, основанный на примере EDIT 2 Матиаса Ликкегаарда Лоренцена:
Public Sub Ask()
Try
Dim S1 As String = "a"
Dim StringFromFile As String = "S1=hello"
Dim temp() As String = Split(StringFromFile, "=", -1, CompareMethod.Binary)
'temp(0) = variable name
'temp(1) = variable value
'my question is: how to assign value to S1?
Dim TypeOfMe As Type = Me.GetType()
'did this for readability.
Dim VariableName As String = temp(0)
Dim VariableValue As String = temp(1)
'get the field in the class which is private, given the specific name (VariableName).
Dim Field As FieldInfo = TypeOfMe.GetField(VariableName, BindingFlags.NonPublic Or BindingFlags.Instance)
'set the value of that field, on the object "Me".
Field.SetValue(Me, VariableValue) '<-- this line caused NullReferenceException
MessageBox.Show(S1)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub