privatestatic TOut TransReflection<TIn, TOut>(TIn tIn) { // 创建一个新的 TOut 实例 TOut tOut = Activator.CreateInstance<TOut>(); // 获取到 tIn 的类型 var tInType = tIn.GetType(); // 遍历 TOut 的属性 foreach (var itemOut in tOut.GetType().GetProperties()) { // 获取到 tIn 的属性 var itemIn = tInType.GetProperty(itemOut.Name);
if (itemIn != null) { // 将 tIn 的属性赋给 tOut 的对应属性 itemOut.SetValue(tOut, itemIn.GetValue(tIn)); } } return tOut; }
namespaceAsyncTest { classProgram { staticvoidMain(string[] args) { Player A = new Player("A", 10); //Player B = A; // 浅拷贝 Player B = TransReflection<Player, Player>(A); // 深拷贝 B.Age = 20; Console.WriteLine($"{A.Name}{A.Age}"); Console.WriteLine($"{B.Name}{B.Age}"); Console.ReadKey(); } privatestatic TOut TransReflection<TIn, TOut>(TIn tIn) { // 创建一个新的 TOut 实例 TOut tOut = Activator.CreateInstance<TOut>(); // 获取到 tIn 的类型 var tInType = tIn.GetType(); // 遍历 TOut 的属性 foreach (var itemOut in tOut.GetType().GetProperties()) { // 获取到 tIn 的属性 var itemIn = tInType.GetProperty(itemOut.Name);
if (itemIn != null) { // 将 tIn 的属性赋给 tOut 的对应属性 itemOut.SetValue(tOut, itemIn.GetValue(tIn)); } } return tOut; } } publicclassPlayer { publicstring Name { get; set; } publicint Age { get; set; } publicPlayer() { } publicPlayer(string name, int age) { this.Name = name; this.Age = age; } } }