我有两个应该完全相同的类,除了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;
有什么方法可以使用属性较少的另一个类快速填充一个类?
我可以单独设置每个属性,但是我正在使用的类很大,感觉很不好。
在此先感谢您的帮助。
答案 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的所有详细信息”
因此,如果您有
void your_func_fill(BaseClass _BaseClass)
您可以仅通过子类对象调用此函数
MyNewClass _MyNewClass;
...
your_func_fill(_MyNewClass)
祝你好运!