Определить переменную по ее имени в виде строки

158
11 февраля 2019, 01:30

Можно ли как-то определить переменную по ее имени в виде строки?

Например:

int s = 0;
FindVar("s") = 25;
Console.WriteLine(s.ToString()); // 25

Знаю, что функцию можно, но вот именно переменная интересует.

Answer 1

С локальной переменной этого не сделать, т. к. компилятор имеет право вообще не использовать никакие переменные или назначить им свои имена.

Если вы сделаете переменную членом класса — полем или свойством, то задача станет решаемой: до членов класса можно добраться с помощью рефлексии:

class Data
{
    public int a, b, c;
    public void SetField(string name, int value)
    {
        var field = typeof(Data).GetField(name);
        field.SetValue(this, value);
    }
}

Затем:

var data = new Data();
Console.WriteLine(data.a); // 0
data.SetField("a", 10);
Console.WriteLine(data.a); // 10
Answer 2

Можно.
Используйте Dictionary.

//Заполнение:
Dictionary<string, object> vars = new Dictionary<string, object>();
vars["переменная1"] = 20;
vars["переменная2"] = "Hello, world";
//Вывод:
Console.WriteLine(vars["переменная1"]); //20
Console.WriteLine(vars["переменная2"]); //Hello, world!
READ ALSO
Можно ли сделать словарь только для чтения?

Можно ли сделать словарь только для чтения?

Допустим, класс внутри себя содержит дженерик словарьЯ бы хотел его прокинуть наружу, но с запретом на редактирование

166
Работа с большой коллекцией

Работа с большой коллекцией

В общем есть вот такой класс:

153
Массив из GameObject-ов

Массив из GameObject-ов

Как изменить Scale всех объектов в массивеЯ сделал так: public GameObject[] scaler;

184
Обновление данных в таблице используя DataTable C# Postgres

Обновление данных в таблице используя DataTable C# Postgres

Нужно выполнить обновление записей в таблице в субд Postgres,

173