c# - 使用几乎相同的类数据填充一个类
问题描述
我有两个类应该完全相同,除了一个类需要另一个属性。
我没有将所有属性重写两次,而是考虑从 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;
有没有办法使用另一个具有较少属性的类来快速填充一个类?
我可以单独设置每个属性,但是我使用的类非常大,感觉像是不好的做法。
提前感谢您的帮助。
解决方案
不是每一个水果都是一个苹果,所以从编译器的角度来看,不是每一个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;
推荐阅读
- python - 如何使用python提取上传到jupyter文件的文件名?
- c - 如何在阻止读取时检测 USB 断开连接?
- salesforce - 如何连接多个字段中存在的值并将其显示为目标字段中的单个值
- javascript - 将链接标记转换为链接
- unity3d - Unity 2D - 动画大幅降低 FPS
- php - 在 Woocommerce 中完成订单状态后保留自定义用户角色
- php - 连接 MySQL 失败:服务器向客户端发送未知字符集。请向开发人员报告 - SamplePage.php
- javascript - TypeScript 中最初未定义的变量的正确类型是什么?
- node.js - Swagger-ui 2.0 路径没有从顶部获得承载授权
- javascript - 当我包含完美的滚动条时,导航抽屉在短时间内可见