Стал замечать , что нужно довольно часто иметь такую структуру данных.
Использование простого Dictionary не очень удобно, т.к. добавление или изменение требует нескольких TryGetValue и Add в случае если нет элементов.
Dictionary<Y,Z> yz;
if (!d.TryGetValue(x, out yz)) { yz = d[x] = new Dictionary<Y,Z>(); }
Z z;
if (!yz.TryGetValue(y, out z)) { z = yz[y] = new Z(); }
z.CallMethod();
На данный момент добавились методы расширения GetOrAdd и код легко переписывается в :
d.GetOrAdd(x, _ => new Dictionary<Y,Z>()).GetOrAdd(y, _ => new Z()).CallMethod();
Однако это начинает утомлять.
В итоге подумываю над созданием более удобного класса NestedDictionary<K,V,W> и возможно далее NestedDictionary<K,V,W,X> ...
Что делаете в таких случаях ?
Есть ли готовый вариант для этого ?