c# - 将模型项转换为派生类
问题描述
我有两个类和一个方法。我正在尝试将方法中的 a 转换List<Timelineinfo>
为 a List<Edit>
。
public class Timelineinfo
{
public int Name { get; set; }
public int Age { get; set; }
}
public class Edit : Timelineinfo
{
public int Confirmed { get; set; }
}
方法:
public ActionResult Edit(SubmitModel model)
{
model.Timelineinfos = (Edit)model.Timelineinfos; //Convert the Timelineinfo data into the Edit class,
// which has an additional Confirmed property.
model.Confirmed = 0;
return null;
}
但是,model.Confirmed = 0;
在线上,我收到以下错误:
SubmitModel' 不包含“Confirmed”的定义,并且找不到接受“SubmitModel”类型的第一个参数的可访问扩展方法“Confirmed”(您是否缺少 using 指令或程序集引用?)
提交模型如下所示:
public class SubmitModel
{
[BindProperty]
public Timelineinfo Timelineinfos { get; set; }
}
解决方案
据我所知,这不可能通过简单的内联转换来实现。
您在这里有 2 个不错的选择:
使用 AutoMapper,您可以为此进行配置,并且 lib 将为这种情况制作一个单线,请参见此处:https ://docs.automapper.org/en/stable/Getting-started.html
在您的编辑中编写一个方法,例如一个构造函数:
public class Edit : Timelineinfo { public Edit(Timelineinfo info) { Name = info.Name; Age = info.Age; } public int Confirmed { get; set; } }
带清单:
public ActionResult Edit(List<SubmitModel> model)
{
model.Timelineinfos = model.Select(x => new Edit(x.TimelineInfo)).ToList();
model.Confirmed = 0;
return null;
}
无列表:
public ActionResult Edit(SubmitModel model)
{
model.Timelineinfos = new Edit(model.TimelineInfo);
model.Confirmed = 0;
return null;
}
推荐阅读
- python - Binance API 打开期货交易的正确方法?
- influxdb - 合并多个涌入数据库并将带有数据库名称的标签添加到数据中?
- download - Opentest - 如何在 chrome(配置 ACTOR 文件)上运行测试,使其直接允许下载而不显示 Keep/Discard 选项?
- kotlin - 与迭代 Kotlin 中枚举值的泛型方法的接口
- amazon-web-services - AWS RDS 集群实例是否需要相同大小?
- mysql - Pentaho 设计器无法识别时间戳数据
- typescript - 如何防止 TypeScript 中的递归条件无限?
- php - 谷歌云存储 - 计算非常大的桶中的对象
- excel - 如何通过Excel中的答案对具有不同分数的测试进行评分?
- azure - 如何限制/停止对 Azure 功能的公共(互联网)访问?