C# 将类型转换为具有相同声明的不同类型

C# Cast a type to a different type with same declaration

所以假设我有一个类型 X,它是一个抽象 class,就像 public abstract class X 一样。现在假设我有一个类型 A,它派生自类型 Y,就像这样 public class A : YXY的定义相同:

public abstract class X
{
    public string Name { get; internal set; }

    public virtual void PrintName()
    {
        Console.WriteLine(Name);
    }
}

public abstract class Y
{
    public string Name { get; internal set; }

    public virtual void PrintName()
    {
        Console.WriteLine(Name);
    }
}

我无法更改 X 中的任何内容(添加界面,...)。我也不能从 X 派生,因为程序会自动加载它。 classes XY 更大,有字段、属性和大量方法,但我尽可能保持最小。是否可以将 A 转换为 X ?像

X obj = (X)(new A())

我已经尝试过:Json De/Seriliazation,使用动态 X cls = (X)(new A() as dynamic);。我可能会使用 TypeBuilder,但我没有任何使用 TypeBuilder 的经验。

我认为您可以使用 AutoMapper 解决此问题: https://docs.automapper.org/en/stable/Mapping-inheritance.html

将AutoMapper nuget包添加到您的项目后,添加以下内容class:

public class XYBAProfile : AutoMapper.Profile
{
    public XYBAProfile()
    {
        CreateMap<Y, X>()
            .Include<A, B>();
        CreateMap<A, B>();
    }
}

现在您应该能够从任何 A 对象创建 X 对象了:

 public static void Test()
 {
    var mapperConfig = new AutoMapper.MapperConfiguration(conf => conf.AddProfile<XYBAProfile>());
    var mapper = mapperConfig.CreateMapper();

    var a = new A() { Name = "Something" };
    X x = mapper.Map<X>(a);

    x.PrintName();
 }