任意对象拷贝 ObjectCopier

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

     

 

using System;

using System.IO;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

 
/// 

/// 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.

/// 

public static class ObjectCopier
{

   /// 

    /// Perform a deep Copy of the object.

    /// 

    /// The type of object being copied.

    /// The object instance to copy.

    
/// The copied object.

    
public static T Clone(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)