C# 如何将基类对象的属性复制到子类对象
考虑以下两类:C# 如何将基类对象的属性复制到子类对象,c#,C#,考虑以下两类: public class AAA{ string _Test1; public string Test1{ get=>_Test1; set{_Test1=value;} } } public class BBB:AAA{ string _Test2; public string Test2{ get=>_Test2; set{_Test2=value;} } } 以下是对象: AAA aaa=new AA
public class AAA{
string _Test1;
public string Test1{
get=>_Test1;
set{_Test1=value;}
}
}
public class BBB:AAA{
string _Test2;
public string Test2{
get=>_Test2;
set{_Test2=value;}
}
}
以下是对象:
AAA aaa=new AAA(){Test1="123"};
BBB bbb=new BBB(){Test2="456"};
我想将aaa
的所有值复制到子类bbb
事实上,基类对象中有许多属性,我不想逐个手动复制这些值:
bbb.Test1=aaa.Test1;
我该怎么做?你能帮帮我吗?谢谢。您可以使用:
foreach (var field in typeof(AAA).GetFields())
{
field.SetValue(bbb, field.GetValue(aaa));
}
其思想是在
bbb
中的AAA
类型的所有字段中循环,并为它们分配AAA
中的值。请注意,这仅适用于字段;如果您还想复制属性的值,您可以将其扩展为也使用.GetProperties()
方法。似乎是一个典型的用例,因为您实际上想做的是将基类类型的对象的所有值复制到子类类型的另一个对象。我没听错吧?到目前为止,你的头衔是错误的,因为如果我随便拿,那么答案是你不需要,他们都是继承的!如果我是你,我会退后一步,问你为什么要这么做。对我来说,这似乎有点代码味道。@ZoharPeled也许可以,但我想找到一些原创的C代码来做。我不明白你说的“原创C代码”是什么意思。框架中没有任何内置功能,这就是为什么我们首先有第三方映射解决方案,如automapper。我尝试了你的方法。然而,奇怪的是,它没有报告错误,但没有正确复制。bbb中的所有值都是默认值,但不是aaa中的值。@10245074在描述您的情况时,需要精确。你们班上真的有字段吗?或者你有房子吗?这对我们来说是一个巨大的不同reflection@102425074这些都是属性,它们之间的差异可能是有限的。您需要使用以下方法:GetProperties()
@10245074请注意,像这样的反射可能非常慢,这就是像AutoMapper这样的库存在的原因。您还将为设置的每个属性调用所有的OnPropertyRaised
事件,这通常是一个巨大的性能问题。这可能很烦人,但手动操作可能是最安全、最有效的选择。@MongZhu我担心会因为误认为它们是同一件事而制造更多的麻烦。现在我对它进行了编辑,并将阅读更多关于字段和属性之间区别的内容。