bool CanInsertElementOfType(IExpressionElement lastElem, IExpressionElement elemToAdd)
        {
            var map = lastElement_possibleTypesOfNext_map;

            // интерфейс, реализуемый элементом и имеющийся в настройках
            var keyType = lastElem == null ? typeToStartExpressionWith :
                          lastElem.GetType()
                          .GetInterfaces()
                          .First(i => map.ContainsKey(i));
            var possibleTypes = map[keyType];

            // имеется ли в настройках интерфейс, реализуемый элементом
            var result = possibleTypes
                         .Any(t => elemToAdd.GetType()
                              .GetInterfaces()
                              .Contains(t));

            return(result);
        }