C#: Вопрос на засыпку

Сегодня, решая одну из задач, у меня получилось структура и код, которые являются наглядным примером того, почему стоит знать о том как устроен тот или иной язык программирования.

Честно говоря, я не сразу понял почему я получаю не тот результат, который ожидаю. Пришлось немного подумать и решение проблемы долго себя ждать не заставило. Ниже я представлю упращенную версию моего кода. А вы постарайтесь ответить на два вопроса: «что будет находится в переменной a» и «почему»?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    struct A
    {
        public struct B
        {
            public List<int> Numbers { get; private set; }
            public void Add(int n)
            {
                if (this.Numbers == null)
                {
                    this.Numbers = new List<int>();
                }
                this.Numbers.Add(n);
            }
        }
        
        public List<B> Columns;
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            
            a.Columns = new List<A.B>();
            a.Columns.Add(new A.B());
            a.Columns[0].Add(1);
            a.Columns[0].Add(2);
            a.Columns[0].Add(3);

            Console.ReadKey();
        }
    }
}

Чуть позже я опубликую пояснения к данной программе. Все свои предположения можете оставлять в комментариях.

Запись опубликована в рубрике C# с метками , , , , , . Добавьте в закладки постоянную ссылку.