我有一个包含列表的类。我想将该列表复制到另一个包含相同类型和数量的属性的对象。
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; }
}
解决方案
在每次迭代中将相应列表添加到新对象。
谢谢,
答案 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 :您可以使用扩展方法,隐式或显式运算符手动为每个类创建转换器,或者只使用静态函数编写辅助类。