使用几乎相同的班级数据填充班级

时间:2018-11-21 16:38:48

标签: c# asp.net class

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

我没有将所有属性重写两次,而是想到了通过MyNewClass中的一个额外属性从BaseClass继承所有属性

 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;

有什么方法可以使用属性较少的另一个类快速填充一个类?

我可以单独设置每个属性,但是我正在使用的类很大,感觉很不好。

在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

并不是每个 fruit 都是一个 apple ,因此从编译器的角度来看,并非每个BaseClass都是MyNewClass的一个实例,因此强制转换失败。 / p>

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

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;

答案 1 :(得分:0)

如果您有很多属性,并且不想手动设置每个属性,那么我建议您像这样遍历它们

public class MyNewClass : BaseClass
{
    public MyNewClass(BaseClass seizeProperties)
    {
        PropertyInfo[] baseProperties = typeof(BaseClass).GetProperties();
        foreach (PropertyInfo property in baseProperties)
        {
            property.SetValue(this, property.GetValue(seizeProperties));
        }
    }
    public int? ExtraProperty { get; set; }
}

答案 2 :(得分:0)

“我已经在我的函数中填写了原始BaseClass的所有详细信息”
因此,如果您有

这样的func
void your_func_fill(BaseClass _BaseClass)

您可以仅通过子类对象调用此函数

MyNewClass _MyNewClass;

...

your_func_fill(_MyNewClass)

祝你好运!