C# создание многоуровневого словаря
Задача
Переписываю свой код из Lua на C#. На примере с адресами местожительства будет проще продемонстрировать.
Нужно прочитать инфу из текстового файла и сохранить во многомерном массиве, чтобы получать доступ к инфе на каждом из его уровней. Выбор пал на Dictionary, поскольку имеет схожую механику с таблицами в Lua, плюс дополнительные ништяки.
Мне необходимо, чтобы в приведенном ниже коде я мог выполнить строку 4 без ошибок. Как правильно инициализировать словарь в таком случае?
Ожидание
//г. Москва, ул. Мясницкая, д. 3, кв. 2
object City = "Москва";
object Street = "Мясницкая";
object House = 3;
object Apartment = 2;
//варианты инициализации словаря
var map = new Dictionary<object, object>(); // 1
//var map = new Dictionary<object, Dictionary<object, object>>(); // 2
//var map = new Dictionary<object, Dictionary<object, Dictionary<object, object>>>(); // 3
//var map = new Dictionary<object, Dictionary<object, Dictionary<object, Dictionary<object, object>>>>(); // 4
//строки с ошибками компилятора
map[City] = new Dictionary<object, object>(); // 1
map[City][Street] = new Dictionary<object, object>(); // 2
map[City][Street][House] = new Dictionary<object, object>(); // 3
map[City][Street][House][Apartment] = true; // 4
Результат
- При 1м варианте компилятор ругается на строки 2, 3 и 4.
- При 2м варианте на строки 3 и 4.
- При 3м варианте на строки 1 и 4.
- При 4м варианте на строки 1 и 2.
Во 2м варианте еще более-менее начинает работать, поскольку я уже могу что-то записать в двумерный словарь
map[City][Street] = true;
Но мне требуется создать четырехмерный (а возможно и еще крупнее).
Рабочий код на основе моего вопроса и ответов пользователей
object City = "Москва";
object Street = "Мясницкая";
object House = 3;
object Apartment = 2;
var map = new Dictionary<object, Dictionary<object, Dictionary<object, Dictionary<object, object>>>>();
map[City] = new Dictionary<object, Dictionary<object, Dictionary<object, object>>>();
map[City][Street] = new Dictionary<object, Dictionary<object, object>>();
map[City][Street][House] = new Dictionary<object, object>();
map[City][Street][House][Apartment] = true;