Как C # превращает имя переменной в имя свойства анонимного объекта? - PullRequest
3 голосов
/ 04 октября 2009

При создании нового анонимного объекта используется следующий синтаксис:

string name = "Foo";
var myObject = new { name };

Вы получаете объект со свойством с именем 'name':

myObject.name == "Foo"; //true

Какой метод использует C # для извлечения имени переменной?

Ответы [ 2 ]

5 голосов
/ 04 октября 2009

Если ваш вопрос "как мне получить имя переменной?" (как вы упоминаете в своем комментарии выше), тогда это неправильный вопрос, потому что он не получает имя переменной. инициализатор проекции вовсе не обязательно должен быть переменной . Все, что нужно, это либо идентификатор , либо выражение , за которым следует период, за которым следует идентификатор . Имя, используемое инициализатором проекции, является идентификатором.

Если ваш вопрос на самом деле таков: «Как мне получить имя переменной?» Ответ таков: «Нет, потому что переменные не обязательно имеют уникальные имена». Переменная может иметь ноль, одно или несколько имен, связанных с ней, и эти имена известны только во время компиляции (или отладчику, потребляющему информацию, выданную компилятором); имена не существуют во время выполнения.

5 голосов
/ 04 октября 2009

По сути, это выражение эквивалентно

new { name = name }

, поскольку не указано явное имя свойства.

Компилятор C # генерирует класс во время компиляции со свойством name. Он выводит имя свойства из имени переменной (которое он, очевидно, видит). Все статически напечатано во время компиляции. Ничего особенного не выполняется во время выполнения (кроме инициализации экземпляра анонимного класса). Ни к чему не вызывается метод.

...