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

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

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

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

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

textual
Листинг программы
 class Program
    {
        static void Main()
        {
            // Анонимные типы в анонимных типах.
 
            var instance = new { Name = "Alex", Age = 27, Id = new { Number = 123 } };
 
            Console.WriteLine("Name = {0}, Age = {1}, Id = {2}", instance.Name, instance.Age, instance.Id.Number);
 
 
            // Delay.
            Console.ReadKey();
        }
    }

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


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

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

9   голосов , оценка 4 из 5
Похожие ответы