Вложенные анонимные типы? - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет, имеется вот такой пример:
Листинг программы
  1. class Program
  2. {
  3. static void Main()
  4. {
  5. var instance = new { Name = "Alex", Age = 27 };
  6. Console.WriteLine("Name = {0}, Age = {1}", instance.Name, instance.Age);
  7. Type type = instance.GetType();
  8. Console.WriteLine(type.ToString());
  9. // Delay.
  10. Console.ReadKey();
  11. }
  12. }
Как видно, в данном примере - один анонимный тип вкладывается в другой. Я понял, что это можно изобразить примерно так: см вложение Также как я понял, когда я создаю анонимный тип, Visual Studio создает новый класс и новый класс создается когда компилятор встречает новый анонимный тип. Новизна определяется путем сравнения имен свойств, их порядка и типов. И получается, что когда я создаю новый анонимный тип, то Visual Studio порождает (примерно) следующий класс:
Листинг программы
  1. [DebuggerDisplay("{ x = {x}, y = {y} }", Type = "<Anonymous Type>")]
  2. public sealed class Anonymous<TX, TY>
  3. {
  4. private readonly TX field_x;
  5. private readonly TY field_y;
  6. public TX x { get { return field_x; } }
  7. public TY y { get { return field_y; } }
  8. [DebuggerHidden]
  9. public Anonymous(PX x, PY y)
  10. {
  11. field_x = x;
  12. field_y = y;
  13. }
  14. public override bool Equals(object value) { /* тут имплементация */ }
  15. public override int GetHashCode() { /* тут имплементация */ }
  16. public override string ToString() { /* тут имплементация */ }
  17. }
Но если у меня один анонимный тип вложен в другой, то эти порожденные классы будут Nested классами ли нет?

Решение задачи: «Вложенные анонимные типы?»

textual
Листинг программы
  1.  class Program
  2.     {
  3.         static void Main()
  4.         {
  5.             // Анонимные типы в анонимных типах.
  6.  
  7.             var instance = new { Name = "Alex", Age = 27, Id = new { Number = 123 } };
  8.  
  9.             Console.WriteLine("Name = {0}, Age = {1}, Id = {2}", instance.Name, instance.Age, instance.Id.Number);
  10.  
  11.  
  12.             // Delay.
  13.             Console.ReadKey();
  14.         }
  15.     }

ИИ поможет Вам:


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

Оцени полезность:

9   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы