正在将带有对象的集合发送到另一个列表中
本文关键字:另一个 列表 集合 对象 | 更新日期: 2023-09-27 18:28:41
我有一个静态方法,它会返回我,因为它的名称表示域模型中的数据。
public static List<PropertyViewModel> FromDomainModel(List<Property> x)
{
List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
foreach (Property p in x)
{
dataVm.Add(new PropertyViewModel(p));
}
return dataVm;
}
Bellow是视图模型,它在FromDomainModel之上调用…其他属性。。。
public List<Photo> Photos { get; set; }
和第一个
public PropertyViewModel(Property x)
{
Id = x.Id;
...
List<Photo> Photos = new List<Photo>();
foreach (var item in x.Photos)
{
Photos.Add(item);
}
}
在调试模式下,我会收集照片,直到它到达FromDomainModel()方法中的行
List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
在调试时,行dataVm.Add(new PropertyViewModel(p));
中的p实际上保持了正确的集合。问题是为什么没有在列表dataVm中传递。
您通过在这一行声明一个同名的局部变量来隐藏属性Photos:
List<Photo> Photos = new List<Photo>();
通过在名称Photos
之前使用类型名称List<Photo>
,可以声明一个隐藏Property的新变量。
您可以使用实际属性修复此问题:
Photos = new List<Photo>();
或者,更具体地说:
this.Photos = new List<Photo>();
在PropertyViewModel构造函数中,您正在填充Photo对象的本地列表,然后当您离开构造函数时,该集合将丢失。看起来您需要一个针对PropertyViewModel类填充的的照片集合
即,而不是:
List<Photo> Photos = new List<Photo>();
您不应该有本地(构造函数)照片集合,而应该只使用PropertyViewModel的属性:
public class PropertyViewModel
{
public List<Photo> Photos { get; private set; }
public PropertyViewModel()
{
...
Photos = new List<Photo>();
...
}
}