如何动态地将列表从一个对象添加到另一个对象?

时间:2017-09-20 18:26:09

标签: c#

我有一个包含列表的类。我想将该列表复制到另一个包含相同类型和数量的属性的对象。

        List<CinemaUnitSchema> cinemaUnitSchemas = new List<CinemaUnitSchema>();
        foreach (CinemaUnit cinemaUnits in scenario.CinemaUnits)
        {
            cinemaUnitSchemas.Add(new CinemaUnitSchema
            {
                Name = cinemaUnits.Name,
                AttendantPoints = cinemaUnits.AttendantPoints,
                ShowPoints = cinemaUnits.ShowPoints
            });                

        }
        scenarioSchema.CinemaUnits.AddRange(CinemaUnitSchemas);

但是,我在这行代码中收到错误;

AttendantPoints = cinemaUnits.AttendantPoints

我收到的错误是:

&#34;无法隐式转换类型&#39; System.Collections.Generic.List&lt; MyApp.Models.AttendantPoint&gt;&#39;到&#39; System.Collections.Generic.List&lt; MyApp.Schemas.AttendantPointSchema&gt;&#39;。&#34;

CinemaUnit类是:

public class CinemaUnit
{
    public string Name { get; set; }    
    public List<AttendantPoint> AttendantPoints { get; set; }
    public bool ShowPoints { get; set; }
}

CinemaUnitSchema类是:

public class CinemaUnitSchema
{
    public string Name { get; set; }    
    public List<AttendantPoint> AttendantPoints { get; set; }
    public bool ShowPoints { get; set; }
}

解决方案

在每次迭代中将相应列表添加到新对象。

谢谢,

3 个答案:

答案 0 :(得分:2)

您可以编写一个使用反射制作浅层副本的Copy方法。

void Copy(object from, object to)
{
    var dict = to.GetType().GetProperties().ToDictionary(p => p.Name, p => p);
    foreach(var p in from.GetType().GetProperties())
    {
        dict[p.Name].SetValue(to, p.GetValue(from,null), null);
    }
}

答案 1 :(得分:0)

不确定这是否是问题,但它可能是一个不错的选择。 您正在使用let z = Decimal(_exponent: -1, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (100, 0, 0, 0, 0, 0, 0, 0)) print(z) // 10.0 print(z.exponent) // -1 print(z.isWholeNumber) // true 语句与驼峰案例foreach,但是当您尝试复制字段时,您使用标题案例cinemaUnits而不是带有驼峰案例的变量。

答案 2 :(得分:0)

您真正需要的是将AttendantPoint转换为AttendantPointSchema的方法。

解决方案1 ​​:您可以使用AutoMapper框架来执行此操作。

解决方案2 :您可以编写类似@Eser建议的通用转换器。

解决方案3 :您可以使用扩展方法,隐式或显式运算符手动为每个类创建转换器,或者只使用静态函数编写辅助类。