Получение значения переменных по имени в C#
Процесс отображения значений переменных несколько запутан, но он не слишком длинный. Пример начинается с использования следующего кода для определения некоторых частных и открытых полей.
// Некоторые значения уровня формы. private string private_value1 = "This is private value 1"; private string private_value2 = "This is private value 2"; public string public_value1 = "This is public string value 1"; public string public_value2 = "This is public string value 2"; public string[] array1 = {"A", "B", "C"}; public string[] array2 = {"1", "2", "3"};
Когда вы выбираете имя переменной из поля со списком, программа использует следующий код для отображения соответствующего значения переменной.
// Отображение значения выбранного поля. private void cboFields_SelectedIndexChanged(object sender, EventArgs e) { FieldInfo field_info = this.GetType().GetField(cboFields.Text, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (field_info == null) { lblValue.Text = ""; } else if (field_info.FieldType.IsArray) { // Присоединяем значения массива к строке. string[] values = (string[])field_info.GetValue(this); lblValue.Text = string.Join(",", values); } else { // Просто преобразуем его в строку. lblValue.Text = field_info.GetValue(this).ToString(); } }
Этот код использует метод GetType формы, чтобы получить объект типа формы. Он использует метод GetField этого объекта, чтобы получить объект FieldInfo, описывающий выбранное поле. Он включает в себя флаги Instance, NonPublic и Public, поэтому GetField возвращает информацию о значениях переменных, которые являются либо частными, либо общественности.
Если объект FieldInfo null, код отображает строку, в которой он не может найти поле. Если FieldInfo является массивом, код использует метод GetValue для получения значения, а затем возвращает результат в массив строк. Он объединяет строковые значения и отображает результат.