Пример #1
0
        private static BaseContainerUnits _If(this BaseContainerUnits container, bool any, params Unit[] units)
        {
            var containerIfElsesUnits = container.LastAddedUnit as ContainerIfElsesUnits;

            if (containerIfElsesUnits == null)
            {
                containerIfElsesUnits = new ContainerIfElsesUnits();
                container.AddUnit(containerIfElsesUnits);
            }
            else
            {
                BaseContainerUnits ownerContainerIfElseUnits = containerIfElsesUnits;
                var nextContainer = containerIfElsesUnits;

                while (nextContainer != null)
                {
                    var lastAddedContainer = nextContainer.LastAddedUnit;
                    var containerListUnits = lastAddedContainer as ContainerListUnits;
                    if (containerListUnits != null)
                    {
                        ownerContainerIfElseUnits = containerListUnits;
                        nextContainer             = ownerContainerIfElseUnits.LastAddedUnit as ContainerIfElsesUnits;
                    }
                    else
                    {
                        if (lastAddedContainer != null)
                        {
                            throw new InvalidOperationException();
                        }
                    }
                }

                containerIfElsesUnits = new ContainerIfElsesUnits();
                ownerContainerIfElseUnits.AddUnit(containerIfElsesUnits);
            }

            var newContainer = any ? new ContainerAnyUnits() : (BaseContainerUnits)(new ContainerListUnits());

            foreach (var unit in units)
            {
                newContainer.AddUnit(unit);
            }

            containerIfElsesUnits.AddUnit(newContainer);

            return(newContainer);
        }