Случай анонимных переменных только для чтения - PullRequest
1 голос
/ 18 января 2012

Анонимный тип может потреблять память двумя способами.

Первый путь

public MyAdd MyFunc()
        {
            return new MyAdd
            {
                name = "Mike",
                Address = "MyTown"
            };
        }


var x = MyFunc();

Второй путь

x = new { name = "Mike", Address = "MyTown" };

Разница в этих двух утверждениях заключается в том, что c.name в случае первого используется только для чтения, а в более позднем случае его можно изменить.

Мой вопрос заключается в том, что в обоих случаях, наконец, анонимный тип потребляет некоторое значениепочему в случае структуры это не только для чтения.Есть ли для этого внутренний механизм?

1 Ответ

1 голос
/ 18 января 2012

Нет, в первом случае вы не используете анонимный тип. Первый код эквивалентен:

var tmp = new MyAdd();
tmp.name = "Mike";
tmp.Address = "MyTown";
return tmp;

Дополнительный тип не вводится. Я знаю, что выглядит как синтаксис для выражения для создания анонимного объекта или инициализатора анонимного объекта (таковы термины, используемые в спецификации), но это действительно просто используя существующий тип. Это просто выражение создания объекта с использованием инициализатора объекта - здесь нет ничего анонимного.

Подробнее см. В разделах 7.6.10.1 и 7.6.10.2 спецификации C # 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...