我写了一个函数,它可以将一个类的属性复制到另一个类中,因此可以复制一个对象。
比如说
MyObject myObject = myOtherObject.MyCustomCopy(myObject)
其中myObject和myOtherObject是相同类型的。我基本上是这样做的
myObject.prop1 = myOtherObject.prop1
myObject.prop2 = myOtherObject.prop2
myObject.prop3 = myOtherObject.prop3
return myObject
我很确定在过去我使用了一个. NET对象,它自动地完成了这件事,我猜是通过反射,但是我不记得了...或者我想象这样的方法存在?
是的,我知道自动Map器,但我确信(现在不太确定)有一个. NET对象可以完成这项工作。
9条答案
按热度按时间elcex8rz1#
您可以查看一下AutoMapper。
oaxa6hgo2#
jucafojl3#
您应该使用AutoMapper,它是为此作业构建的。
v7pvogib4#
System.Object.MemberwiseClone()
lc8prwob5#
尝试此链接中的描述:
.NET Reflection - Copy Class Properties
t8e9dugd6#
这段代码应该适用于基本的属性类型,不确定它是否适用于任何复杂的类型(列表、数组、自定义类)。
lvmkulzt7#
我知道OP没有要求将一个类型转换为另一个类型,但我的变体是我在startup.cs中用于DI的,用于云和本地开发环境之间的配置不匹配。我的本地类通常在后台使用接口类来Map配置。然后我使用此方法来复制属性,仅在名称匹配的地方复制属性。我不检查属性类型,因为这些是配置。有人建议使用AutoMapper。我不使用AutoMapper,因为我们被美国国防部限制只能使用某些提供商。仅仅使用.NET就很难得到一个ATO,我们不需要更多的悲伤。
oalqel3c8#
简单来说:正如我们所知,类是C#.NET中的引用类型,即当我们创建类的对象时,例如
然后,C1(引用变量)存储在内存堆栈上,对象new Customer()存储在堆上。
因此,当我们复制一个类到另一个类,这基本上是你的问题,你可以这样做:
做以上将复制C1引用变量到C2但为什么我写堆栈和堆,因为使用C2引用变量,你可以改变对象属性是C1和C2指向同一对象在堆.
现在,如果您尝试访问
C1.Name
,您将看到它已更改为“Mukesh”。7cjasjjr9#
你可以像这样使用JsonConvert: