使用 foreach 循环将项目动态添加到列表中

Red*_*rus 0 asp.net asp.net-mvc-5

我有一个模型InvoiceViewModel,它有一个属性 Items,它是一个列表。我想foreach在 Items 属性上运行并将其动态添加到列表中。

发票视图模型.cs

public class InvoiceViewModel
{
    ...
    public List<ItemsViewModel> Items { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

ItemsViewModel.cs

public class ItemsViewModel
{
    public string Name { get; set; }
    public string UnitPrice { get; set; }
    public string Quantity { get; set; }
    public string TotalAmount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码将 InvoiceViewModel 中的项目动态添加到列表中。

    var Items = InvoiceViewModel.Items;
    var ItemsList = new List<ItemsViewModel>
    {
        foreach (var item in Items)
        {
            new ItemsViewModel { Name = item.Name, UnitPrice = item.UnitPrice, Quantity = item.Quantity, TotalAmount = item.TotalAmount };
        }
    };
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出错误,} expected

Jam*_*ran 5

好的。因此,您在对象内部循环,这在语法上是错误的。当您初始化 List 时,Object 初始值设定项希望您提供 T 类的列表。你应该做的是:

var ItemsList = new List<ItemsViewModel>();

foreach (var item in InvoiceViewModel.Items)
{
    ItemsList.Add(new ItemsViewModel { Name = item.Name, UnitPrice = item.UnitPrice, Quantity = item.Quantity, TotalAmount = item.TotalAmount });
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 LINQ 表达式来初始化对象,如下所示:

var ItemsList = InvoiceViewModel.Items
                .Select(item => new ItemsViewModel { Name = item.Name, UnitPrice = item.UnitPrice, Quantity = item.Quantity, TotalAmount = item.TotalAmount })
                .ToList();
Run Code Online (Sandbox Code Playgroud)