C# 我想把一个班上的所有东西都复制到另一个班上
我发现了许多与我的问题类似的解决方案。 但它们对我来说并不完美。 这是我想做的。 *修改:我不会使用反射。非常慢。。所以我正在尝试另一种方法来解决这个问题C# 我想把一个班上的所有东西都复制到另一个班上,c#,class,deep-copy,C#,Class,Deep Copy,我发现了许多与我的问题类似的解决方案。 但它们对我来说并不完美。 这是我想做的。 *修改:我不会使用反射。非常慢。。所以我正在尝试另一种方法来解决这个问题 [System.Serializable] class myBase { public int a; public int nType; // Actually lots of fields and properties are here. } [System.Serializable] class TypeA : myBa
[System.Serializable]
class myBase
{
public int a;
public int nType;
// Actually lots of fields and properties are here.
}
[System.Serializable]
class TypeA : myBase
{
public int c;
}
[System.Serializable]
class TypeB : myBase
{
public int d;
}
这就是我要尝试的
class test
{
public void test()
{
myBase cBase = new myBase();
cBase.a = 100;
cBase.nType = 0;
if(cBase.nType == 0)
{
TypeA newThing = new TypeA();
// I want to assign cBase to newThing.
newThing = cBase as TypeA; <= it is not proper:( will return null.
}
else
{
TypeB newThing = new TypeB();
newThing = test.DeepClone<myBase>(cBase); // it's also not proper XD.
}
public static T DeepClone<T>(T obj)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T) formatter.Deserialize(ms);
}
}
}
类测试
{
公开无效测试()
{
myBase cBase=新的myBase();
cBase.a=100;
cBase.nType=0;
如果(cBase.nType==0)
{
TypeA newThing=新TypeA();
//我想把cBase分配给newThing。
newThing=cBase as TypeA;为此,您可以使用库自动映射
但若你们想实现你们自己的,你们可以使用反射来迭代属性并在目的地设置它们
进行此操作时,您应该记住反射速度很慢,因此,一旦获得源和目标对象的属性,您可能应该将其缓存以备将来使用
这篇文章展示了如何使用“动态”类型来实现这一目的。它声称性能要好得多
您可以为此使用库自动映射
但若你们想实现你们自己的,你们可以使用反射来迭代属性并在目的地设置它们
进行此操作时,您应该记住反射速度很慢,因此,一旦获得源和目标对象的属性,您可能应该将其缓存以备将来使用
这篇文章展示了如何使用“动态”类型来实现这一目的。它声称性能要好得多
它不是cBase as TypeA()
,而是cBase as TypeA
。您介意提供现有解决方案“不适合您”的标准吗?您展示的示例是深度克隆的标准方法之一(使用带反射的序列化作为实现细节)所以不太清楚,如果它是你认为不好的方法的样本,你认为是新的方法或者别的什么。它不是<代码> cBASE作为类型()/代码>,它是<代码> cBASE作为TypeA < /代码>。你介意提供为什么现有解决方案“不适合你”的标准吗?你所展示的样本是深度克隆的标准方法之一。(使用反射作为实现细节的序列化)-所以不清楚是否是你考虑坏方法的示例,你认为是新方法或其他东西。它不是<代码> cBaseType()/代码>,它是<代码> Cbaseas TypeA < /Cord>。你介意提供为什么现有解决方案“不适合你”的标准吗??您展示的示例是深度克隆的标准方法之一(使用带有反射的序列化作为实现细节)所以不清楚是否是你考虑的坏方法的样本,你认为是新的方法或者别的什么东西。我想把它自己实现,而不使用反射。我用反射来实现它,它工作得很好。但是很慢。这就是为什么我需要另一种方法来做它。如果你经常复制同一个对象,我想自己实现它,不会使用反射。我用反射实现它,效果很好。但速度很慢。这就是为什么我需要另一种方法来实现它。如果你经常复制同一个对象,缓存反射会有很大的不同。我想自己实现它,不会影响我们反射。我用反射来实现它,效果很好。但是速度很慢。这就是为什么我需要另一种方法来实现它。如果你经常复制相同的对象,缓存反射会有很大的不同