private static T ReadChildElement <T>(XmlReader reader, XmlInitializer <T> initializer) where T : IXmlElement, new()
        {
            T    element = default(T);
            bool isEmpty = reader.IsEmptyElement;

            reader.ReadStartElement();
            if (!isEmpty)
            {
                element = initializer(reader);
                reader.ReadEndElement();
            }
            return(element);
        }
        private static IEnumerable <T> ReadChildCollection <T>(XmlReader reader, XmlInitializer <T> initializer) where T : IXmlElement, new()
        {
            bool isEmpty = reader.IsEmptyElement;

            reader.ReadStartElement();
            if (!isEmpty)
            {
                while (XmlNodeType.Element == reader.NodeType)
                {
                    yield return(initializer(reader));
                }
                reader.ReadEndElement();
            }
        }