コード例 #1
0
ファイル: Many.cs プロジェクト: kilfour/QuickXmlWrite
        public static XmlWriter <XmlWriterNode <TInput> > Many <TInput, TOut>(
            this XmlWriterNode <TInput> writerNode,
            Func <TInput, IEnumerable <TOut> > func,
            XmlWriterAction <TOut> innerWriterAction)
        {
            return
                (state =>
            {
                var oldInput = state.CurrentInput;
                var oldNode = state.Current;
                foreach (var element in (IEnumerable)func((TInput)state.CurrentInput))
                {
                    state.Current = writerNode.Node;
                    state.CurrentInput = element;
                    IResult <XmlWriterNode <TOut> > InnerWriter(State innerState) => new Result <XmlWriterNode <TOut> >(new XmlWriterNode <TOut>(innerState.Current), innerState);

                    var appliedWriter = innerWriterAction(InnerWriter);
                    appliedWriter(state);
                    state.Current = oldNode;
                }
                state.CurrentInput = oldInput;
                return Result <TInput> .WriterNodeResultFromState(state);
            });
        }
コード例 #2
0
ファイル: Apply.cs プロジェクト: kilfour/QuickXmlWrite
        public static XmlWriter <XmlWriterNode <TInput> > Apply <TInput>(this XmlWriterNode <TInput> writerNode, XmlWriterAction <TInput> innerWriterAction)
        {
            return(state =>
            {
                var oldInput = state.CurrentInput;
                var oldNode = state.Current;
                IResult <XmlWriterNode <TInput> > InnerWriter(State innerState) => new Result <XmlWriterNode <TInput> >(new XmlWriterNode <TInput>(innerState.Current), innerState);

                var appliedWriter = innerWriterAction(InnerWriter);
                appliedWriter(state);
                state.Current = oldNode;
                state.CurrentInput = oldInput;
                return Result <TInput> .WriterNodeResultFromState(state);
            });
        }