正在将带有对象的集合发送到另一个列表中

本文关键字:另一个 列表 集合 对象 | 更新日期: 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>();  
    ...  
  }  
}