首页 > 解决方案 > 将模型项转换为派生类

问题描述

我有两个类和一个方法。我正在尝试将方法中的 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; }       
    }

标签: c#classtype-conversion

解决方案


据我所知,这不可能通过简单的内联转换来实现。

您在这里有 2 个不错的选择:

  1. 使用 AutoMapper,您可以为此进行配置,并且 lib 将为这种情况制作一个单线,请参见此处:https ://docs.automapper.org/en/stable/Getting-started.html

  2. 在您的编辑中编写一个方法,例如一个构造函数:

     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;
}

推荐阅读