将值从一个业务对象复制到另一个,而不使用c#中的循环

本文关键字:另一个 循环 复制 对象 业务 一个 | 更新日期: 2023-09-27 18:27:16

我在C#中有两个业务对象,它们具有相同的字段和属性,但名称空间不同。

namespace B1
{
   class myClass
   {
     public string Name{get;set;}
     public int Age{get;set;}
   }
}

namespace B2
{
   class myClass
   {
     public string Name{get;set;}
     public int Age{get;set;}
   }
}

现在,我想将一个业务对象的值复制到另一个。

B1.myClass b1 = new B1.myClass{name="John", Age=18};
B2.myClass b2;

如何将b2的属性值设置为与b1相同??

我有一个方法,但我不想使用它,因为我的业务对象有50多个属性。

b2 = new B2.myClass{Number=b1.Number, Age=b1.Age}

将值从一个业务对象复制到另一个,而不使用c#中的循环

这听起来像是Automapper的工作,它正是为了解决这个问题而编写的。

我建议使用Automapper,如果您有匹配的属性,它会对您有很大帮助。但是,如果您需要在没有外部工具的情况下执行此操作,则可以使用反射来枚举属性:

var b1Properties = b1.GetType().GetProperties();
foreach (var b1Property in b1Properties)
{
     var b2Property = b2.GetType().GetProperty(pi.Name);
     b2Property.SetValue(b2, b1Property.GetValue(b1));
}

或者,您可以在其中一个类上创建一个构造函数,该构造函数接受另一个类的实例,然后在那里设置属性。这对于属性名称不相同的类也适用。