首页 > 解决方案 > 使用几乎相同的类数据填充一个类

问题描述

我有两个类应该完全相同,除了一个类需要另一个属性。

我没有将所有属性重写两次,而是考虑从 BaseClass 继承所有属性,只在 MyNewClass 中添加一个额外属性

 public class BaseClass
    {
        public int BaseProperty1 { get; set; }
        public int BaseProperty2 { get; set; }
        public int BaseProperty3 { get; set; }
    }

    public class MyNewClass: BaseClass
    {
        public int? ExtraProperty{ get; set; }
    }

由于我已经在函数中填写了原始 BaseClass 的所有详细信息,因此能够使用该类的此实例来填写 MyNewClass 的新实例的详细信息会容易得多。

我希望它会像下面这样简单,但不幸的是我得到了错误:System.InvalidCastException:'无法将'BaseClass'类型的对象转换为'MyNewClass'类型。

 MyNewClass myNewClass= new MyNewClass();
 myNewClass = (MyNewClass)baseClass; //baseClass is alread populated at this point
 myNewClass.ExtraProperty = 1;

有没有办法使用另一个具有较少属性的类来快速填充一个类?

我可以单独设置每个属性,但是我使用的类非常大,感觉像是不好的做法。

提前感谢您的帮助。

标签: c#asp.netclass

解决方案


不是每一个水果都是一个苹果,所以从编译器的角度来看,不是每一个BaseClass都是一个实例,MyNewClass因此转换失败。

您可以做几件事。例如使用构造函数来填充值:

public class MyNewClass : BaseClass
{
    public int? ExtraProperty { get; set; }

    public MyNewClass(BaseClass baseClass)
    {
        BaseProperty1 = baseClass.BaseProperty1;
        BaseProperty2 = baseClass.BaseProperty2;
        BaseProperty3 = baseClass.BaseProperty3;
    }
}

然后你可以这样做:

 var myNewClass = new MyNewClass(baseClass);
 myNewClass.ExtraProperty = 1;

推荐阅读