/// <summary>
        /// Makes deep clone of object with all the nested objects and collections
        /// </summary>
        /// <param name="original">Original object</param>
        /// <returns>Object clone</returns>
        public static T DeepClone <T>(T original)
        {
            if (original == null)
            {
                return(original);
            }
            if (typeof(T).IsInlineCloning())
            {
                return(original);
            }
            if (original is ICloneable clon)
            {
                return((T)clon.Clone());
            }

            var dco = new DeepCloneOperator(_cloneDelegates);

            return((T)dco.MakeClone(original));
        }
        /// <summary>
        /// Makes deep clone of object with all the nested objects and collections
        /// </summary>
        /// <param name="original">Original object</param>
        /// <returns>Object clone</returns>
        public static object DeepClone(object original)
        {
            if (original == null)
            {
                return(null);
            }
            if (original.GetType().IsInlineCloning())
            {
                return(original);
            }
            if (original is ICloneable clon)
            {
                return(clon.Clone());
            }

            var dco = new DeepCloneOperator(_cloneDelegates);

            return(dco.MakeClone(original));
        }