【问题标题】:Convert model item to derived class将模型项转换为派生类
【发布时间】:2020-08-06 08:21:33
【问题描述】:

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

【问题讨论】:

  • 您不能将基本类型转换为派生类型。您必须创建派生类型的新实例,以及要保留的副本和属性。
  • 哦,是的,对不起@Jamiec 我猜错了

标签: c# class type-conversion


【解决方案1】:

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

这里有 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;
}

【讨论】:

  • 我现在尝试格式化代码 7 次,我不知道 SO 在这里做什么:D
  • 弹丸内的代码块很奇怪。它们需要缩进
  • 问题在于SubmitModel 本身将Timelineinfos 类型为Timelineinfo ,因此您仍然无法设置Confirmed 属性
  • 哦对,他得把SubmitModel中的TimelineInfo改成Edit!
猜你喜欢
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2010-11-01
  • 2012-12-06
  • 1970-01-01
  • 2017-01-08
  • 2013-11-17
相关资源
最近更新 更多