大量のプロパティを持つオブジェクト間でプロパティの値をコピーしたいことがあります。
毎回コピーするコードを書くのも面倒なので、メモをしておきます。
下記コードの PropertyCopier クラスの CopyTo メソッドでコピーできます。
public static class PropertyCopier { public static T CopyTo<T>(object src, T dest) { if (src == null || dest == null) return dest; var srcProperties = src.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).Where(p => p.CanRead && p.CanWrite); var destProperties = dest.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).Where(p => p.CanRead && p.CanWrite); var properties = srcProperties.Join(destProperties, p => new { p.Name,p.PropertyType}, p => new { p.Name, p.PropertyType }, (p1, p2) => new { p1, p2 }); foreach (var property in properties) property.p2.SetValue(dest, property.p1.GetValue(src)); return dest; } } class Program { static void Main(string[] args) { var dest = PropertyCopier.CopyTo(new Test1() { Prop1 = "p1", Prop2 = "p2", Prop3 = "p3" }, new Test2()); Console.WriteLine($"{dest.Prop1}, {dest.Prop2}, {dest.Prop3}"); Console.ReadKey(); } } public class Test1 { public string Prop1 { get; set; } public string Prop2 { get; set; } public string Prop3 { get; set; } } public class Test2 { public string Prop1 { get; set; } public string Prop2 { get; set; } public string Prop3 { get; set; } }