【C#】クラスをMemCopyしたい
バックアップ用など、データをまるっとコピーしたいことがあります。そんな時は C言語でいうところの memcpy っぽいことができると安心します。
目次
参照
こちらの記事に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);