Serializerでディープコピー
元ネタ
自分の古い記事が元ネタ。これ今ならもっと簡単にかける。 改善点は
- ファイルに書きださない。
- クローン対象に属性を書く必要なし。
コード
Imports System.IO Imports System.Runtime.Serialization 'ref System.Runtime.Serialization.dll Public Class Serializer ''' <summary> ''' Clone by memorystream ''' </summary> ''' <typeparam name="T"></typeparam> ''' <param name="src"></param> ''' <returns></returns> Public Shared Function Clone(Of T)(src As T) As T Dim ser As New DataContractSerializer(GetType(T)) Using m = New MemoryStream ser.WriteObject(m, src) m.Position = 0 Return DirectCast(ser.ReadObject(m), T) End Using End Function End Class
使う
Public Class Entity Public Property Id As Integer Public Property Name As String End Class Module Module1 Sub Main() Dim c As New Entity With {.Id = 1, .Name = "Sample"} Dim x = Serializer.Clone(c) Console.WriteLine("c.Id = {0}", c.Id) '1 Console.WriteLine("c.Name = {0}", c.Name) 'Sample Console.WriteLine("x.Id = {0}", x.Id) '1 Console.WriteLine("x.Name = {0}", x.Name) 'Sample Console.WriteLine("c.Equlas(x) = {0}", c.Equals(x)) 'False Console.WriteLine("press any key to end.") Console.ReadKey() End Sub End Module