任意对象拷贝 ObjectCopier

作者: Babybus_Unity | 来源:发表于2015-12-17 14:01 被阅读68次

    Babybus-u3d技术交流-任意对象拷贝 ObjectCopier

         
    
     
    
    using System;
    
    using System.IO;
    
    using System.Runtime.Serialization;
    
    using System.Runtime.Serialization.Formatters.Binary;
    
     
    /// <summary>
    
    /// Reference Article http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx
    
    /// Provides a method for performing a deep copy of an object.
    
    /// Binary Serialization is used to perform the copy.
    
    /// </summary>
    
    public static class ObjectCopier
    {
    
       /// <summary>
    
        /// Perform a deep Copy of the object.
    
        /// </summary>
    
        /// <typeparam name="T">The type of object being copied.</typeparam>
    
        /// <param name="source">The object instance to copy.</param>
    
        
    /// <returns>The copied object.</returns>
    
        
    public static T Clone<T>(this T source)
    
        {
    
            if (!typeof(T).IsSerializable)
    
            {
    
                throw new ArgumentException("The type must be serializable.", "source");
    
            }
    
     
            // Don't serialize a null object, simply return the default for that object
    
            if (Object.ReferenceEquals(source, null))
    
            {
    
                return default(T);
    
            }
    
     
            IFormatter formatter = new BinaryFormatter();
    
            Stream stream = new MemoryStream();
    
            using (stream)
    
            {
    
                formatter.Serialize(stream, source);
    
                stream.Seek(0, SeekOrigin.Begin);
    
                return (T)formatter.Deserialize(stream);
            }
    
        }
    }
    

    相关文章

      网友评论

        本文标题:任意对象拷贝 ObjectCopier

        本文链接:https://www.haomeiwen.com/subject/yalphttx.html