C# 在类中填充列表
我有一个类,我用它来查看用户列表C# 在类中填充列表,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个类,我用它来查看用户列表 public class OrderVM { public OrderVM() { } public OrderVM(OrderDTO row) { Id = row.Id; ClientId = row.ClientId; OrderDate = row.OrderDate; } public in
public class OrderVM
{
public OrderVM() { }
public OrderVM(OrderDTO row)
{
Id = row.Id;
ClientId = row.ClientId;
OrderDate = row.OrderDate;
}
public int Id { get; set; }
public string ClientId { get; set; }
public string OrderDate { get; set; }
public string ClientName { get; set; }
public string ClientSurname { get; set; }
}
结果我希望在我的观点中看到这一点:
Name Surname Brand Mark
------- -------- ------------ --------
Alexey Petrov Jamis Trail
Scott SPark
Mongoose Expert
我决定在OrderVM类中添加一个列表,这样每个客户都会有一个购买产品的列表:
public class OrderVM
{
public OrderVM() { }
public OrderVM(OrderDTO row)
{
Id = row.Id;
ClientId = row.ClientId;
OrderDate = row.OrderDate;
Bicycles = new List<BicycleVM>();
}
public int Id { get; set; }
public string ClientId { get; set; }
public string OrderDate { get; set; }
public string ClientName { get; set; }
public string ClientSurname { get; set; }
public List<BicycleVM> Bicycles { get; set; }
}
public class BicycleVM
{
public int Id { get; set; }
public string Category { get; set; }
public int CategoryId { get; set; }
public string BrandName { get; set; }
public string Mark { get; set; }
public int Year { get; set; }
public string Color { get; set; }
public decimal WheelSize { get; set; }
public string Frame { get; set; }
public int Speeds { get; set; }
public string Brake { get; set; }
public string BicycleType { get; set; }
public decimal Weight { get; set; }
public decimal Price { get; set; }
public string PriceFormatted { get; set; }
[DisplayName("Image")]
public string ImageName { get; set; }
public IEnumerable<SelectListItem> Categories { get; set; }
public IEnumerable<string> GalleryImages { get; set; }
}
在列表中,有4项具有值:
如果我这样做:
OrderVM order = new OrderVM();
order.Bicycles.AddRange( new List<BicycleVM>(orderedItems));
附:我读过这篇文章
而且不确定如何正确地将这些信息用于我的案例我认为如果您在运行错误所在行之前检查
order.Bicycles
,您会发现该行将为空,因为您使用空构造函数(new OrderVM())创建了OrderVM
对象代码>)
只有接受OrderDTO
作为输入的构造函数才会创建新的自行车列表。因此,当您使用另一个(空)构造函数创建对象时,Bicycles=newlist()代码>从不执行,自行车列表保持为空
并且不能在空对象上执行方法,例如AddRange()
,这就是为什么会出现异常
为了安全起见,您需要运行Bicycles=newlist()两个构造函数中的代码>
例如:
public class OrderVM
{
public OrderVM()
{
Bicycles = new List<BicycleVM>(); //add this line
}
public OrderVM(OrderDTO row)
{
Id = row.Id;
ClientId = row.ClientId;
OrderDate = row.OrderDate;
Bicycles = new List<BicycleVM>();
}
公共类OrderVM
{
公共秩序虚拟机()
{
Bicycles=new List();//添加此行
}
public OrderVM(OrderDTO行)
{
Id=row.Id;
ClientId=row.ClientId;
OrderDate=row.OrderDate;
自行车=新列表();
}
Bicycles=new List();
只在构造函数OrderVM(OrderDTO行)
中使用构造函数OrderVM()
谢谢你的回复。我已经编辑了主要帖子-你能检查一下是否一切正常吗?你编辑的版本不符合我的建议。但是无论如何,没有必要用更正的代码更新你的问题…如果代码没有显示问题,那么问题和答案就没有意义了。只要用你自己的代码修复它,然后让我知道它是否有用。你需要更新你的OrderVM对象,而不是bicycle对象…仔细阅读我写的:)我读了:)你能编辑代码吗?如果你有时间,它应该是什么样子:)?你明白我所说的“空构造函数”是什么意思吗你需要在OrderVM对象中添加一行,仅此而已。我用一个更详细的示例更新了我的答案。
orderedItems.ForEach(x => x.Categories = " ");
orderedItems.ForEach(x => x.Category = " ");
orderedItems.ForEach(x => x.GalleryImages = " ");
orderedItems.ForEach(x => x.PriceFormatted = " ");
public class OrderVM
{
public OrderVM()
{
Bicycles = new List<BicycleVM>(); //add this line
}
public OrderVM(OrderDTO row)
{
Id = row.Id;
ClientId = row.ClientId;
OrderDate = row.OrderDate;
Bicycles = new List<BicycleVM>();
}