当两个对象都是不同的类型但是从同一个父类继承时,如何将一个对象转换为另一个对象

And*_*nis 2 c#

我有2个对象,对象A和对象B.A具有属性颜色和大小,B具有属性颜色,大小和深度.

A和B都继承自C,这是一个抽象类.

如何在运行时将B转换为A?

 abstract class C {

 }

 Class A: C {
     int color;
     int size;
 }

 Class B: C {
     int color;
     int size;
     int depth;
 }

 main() {
     //creating object A
     A objA = new A();
     A.color = 46;
     A.size = 90;

     //creating object B
     B objB = new B();
     B.color = 23;
     B.size = 10;
     B.depth = 78;

     //How to do casting 
     A = B;
 }
Run Code Online (Sandbox Code Playgroud)

use*_*080 9

您可以向类中添加显式强制转换运算符B:

Class B: C {
    int color;
    int size;
    int depth;
    public static explicit operator A(B b)
    {
        return new A() {color = b.color, size = b.size};
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以转换BA使用强制:

A a = (A)b;
Run Code Online (Sandbox Code Playgroud)


gri*_*egs 5

当我遇到这样的问题时,我使用了AutoMapper。

这是一个免费的库,您可以将一个对象映射到另一个对象,甚至可以将一个字段映射到另一个具有不同名称和类型的字段。

您也可以转换List<A>List<B>这是很方便。

github上的AutoMapper链接

编辑

阅读您的最后评论后,我认为AutoMapper可能是您的解决方案。

您不需要明确指定除之外的任何内容。

AutoMapper.CreateMap<A,B>();
Run Code Online (Sandbox Code Playgroud)

然后,您可以映射;

B b = Mapper.Map<A,B>(sourceA);
Run Code Online (Sandbox Code Playgroud)

编辑2

或者,您可以自己使用反射,并创建一个以A作为参数的扩展,并将适当的字段/属性从A复制到B。