【C#】クラスをMemCopyしたい

C#, DEVELOP

バックアップ用など、データをまるっとコピーしたいことがあります。そんな時は C言語でいうところの memcpy っぽいことができると安心します。

目次

参照

どんなオブジェクトでもコピーできる汎用のディープコピー処理(ICloneable, MemberWiseClone, Serializable, BinaryFormatter, MemoryStream) – tekkの日記 C#,VB.NET

こちらの記事にiOS 対応を加えた感じになっています。

コード

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class CopyHelper
{
	public static T DeepCopy( T target )
	{
#if UNITY_IOS
		System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
		object clone = null;
		using( MemoryStream stream = new MemoryStream() )
		{
			BinaryFormatter formatter = new BinaryFormatter();
			formatter.Serialize( stream, target );
			stream.Position = 0;
			clone = formatter.Deserialize( stream );
		}
		return (T)clone;
	}
}

使い方

Serializable 属性を付与します。

[Serializable()]
class Param
{
    public int number;
    public string name;
}
Param src = new Param();
src.number = 999;
src.name = "stepism";
// コピー!
Param dst = Frameworks.Generic.CopyHelper.DeepCopy(src);

Posted by kazupon