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

Например,

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

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

 someVar 

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

Это невозможно сделать с помощью отражения, потому что переменные не будут иметь имя, однажды скомпилированное в 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, но это, вероятно, в слишком жесткой корзине.

  • Общее представление DbDataReader для отображения
  • Как найти все типы в сборке, которые наследуют от определенного типа C #
  • Получить свойства classа с помощью Typcript
  • Вызов статического метода с использованием отражения
  • Загрузка DLL-файлов во время выполнения в C #
  • Как программно компилировать и создавать экземпляр classа Java?
  • Используя reflection, как вы устанавливаете значение поля struct?
  • Поиск параметров типа через reflection в Scala 2.10?
  • Как передать функцию в качестве параметра в C #?
  • c # экземпляр classа из строки
  • Используя .Net, как я могу определить, является ли тип Numeric ValueType?
  • Давайте будем гением компьютера.