Divan.CouchDocument.AutoClone C# (CSharp) Method

AutoClone() protected method

protected AutoClone ( ) : CouchDocument
return CouchDocument
        protected CouchDocument AutoClone()
        {
            var doc = GetType().GetConstructor(Type.EmptyTypes).Invoke(new object[0]) as CouchDocument;
            var properties = GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
            var fields = GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
            foreach (var field in fields)
                field.SetValue(doc, field.GetValue(this));

            foreach (var prop in properties)
                if (!prop.CanWrite || prop.GetIndexParameters().Length > 0)
                    continue;
                else
                    prop.SetValue(doc, prop.GetValue(this, null), null);

            return doc;
        }