Как получить имя переменной с помощью отражения?

Например,

static void Main() { var someVar = 3; Console.Write(GetVariableName(someVar)); } 

Результатом этой программы должно быть:

 someVar 

Как я могу достичь этого, используя reflection?

2 Solutions collect form web for “Как получить имя переменной с помощью отражения?”

Это невозможно сделать с помощью отражения, потому что переменные не будут иметь имя, однажды скомпилированное в IL. Однако вы можете использовать деревья выражений и продвигать переменную к закрытию:

 static string GetVariableName(Expression> expr) { var body = (MemberExpression)expr.Body; return body.Member.Name; } 

Вы можете использовать этот метод следующим образом:

 static void Main() { var someVar = 3; Console.Write(GetVariableName(() => someVar)); } 

Обратите внимание, что это довольно медленно, поэтому не используйте его в критически важных для вашего приложения целях. Каждый раз, когда этот код запускается, создается несколько объектов (что вызывает давление в ГК), и под крышкой вызывается много ненастраиваемых методов и используется некоторое тяжелое reflection.

Более полный пример см. Здесь .

ОБНОВИТЬ

С C # 6.0 nameof слово nameof добавляется на язык, что позволяет нам сделать следующее:

 static void Main() { var someVar = 3; Console.Write(nameof(someVar)); } 

Это, очевидно, намного удобнее и имеет ту же стоимость, что и определение строки как константного строкового литерала.

Вы не можете, используя reflection. GetVariableName передается число 3, а не переменная. Вы можете сделать это с помощью проверки кода IL, но это, вероятно, в слишком жесткой корзине.

  • C # общий список как получить тип T?
  • Gson TypeToken с динамическим типом ArrayList
  • Как получить имена параметров метода в Java 8 с использованием отражения?
  • Отражение. Получение общих параметров из экземпляра System.Type.
  • Получить экземпляр объекта-компаньона с новым API-интерфейсом Scala reflection
  • Как получить путь сборки, в которой находится код?
  • Как вы можете получить имена параметров метода?
  • Как я могу получить все classы в пространстве имен?
  • В чем разница между System.Type и System.RuntimeType в C #?
  • Type.GetType ("namespace.abClassName") возвращает null
  • Получить тип общего параметра в Java с reflectionм
  • Interesting Posts

    Можно ли использовать jQuery для получения ширины элемента в процентах или пикселях в зависимости от того, что разработчик указал с помощью CSS?

    android – сохранить изображение в галерею

    Ошибка сегментации, большие массивы

    ggplot2 – аннотировать вне участка

    Добавление кавычек в строку в VBScript

    Почему локальные переменные, включая примитивы, всегда инициализируются в Java?

    Как загрузить файл в angularjs e2e испытание protractorа

    Regex – Должны ли экраны сбрасываться?

    Невозможно использовать соединение MySQL для сущности framework 6

    Преобразование Int в String в Swift

    Запись данных в CSV-файл в C #

    @Service построены дважды

    Как преобразовать Блестящее приложение, состоящее из нескольких файлов, в легкоansible и воспроизводимый пример Shiny?

    Предотвращать автоматические переадресации в Firefox

    Как я могу записать переход от 0 до 1 в столбце Excel?

    Давайте будем гением компьютера.