在一行中将多个元素添加到列表 C#

use*_*260 3 c# collections

我对 C# 和一般编程相当陌生,我正在尝试制作比萨饼的逻辑。

是否有一种函数或更有效的方法可以将多个元素添加到一行中的列表中。例如,现在要制作一个 5 层比萨饼,我这样做:

Toppings.Add(top1);
Toppings.Add(top2);
Toppings.Add(top3);
Toppings.Add(top4);
Toppings.Add(top5);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

此外,任何关于改进我的代码的建议都将不胜感激。

提前谢谢你的帮助!

using System.Collections.Generic;
using ZePizzaria.Domain.Enums;

namespace ZePizzaria.Domain.Models
{
  public class Pizza
  {
    public static Dictionary<EPizzaSize, double> Cost = new Dictionary<EPizzaSize, double>
    {
      {EPizzaSize.Mega, 25},
      {EPizzaSize.XLarge, 20},
      {EPizzaSize.Large, 15},
      {EPizzaSize.Medium, 10},
      {EPizzaSize.Small, 8.99}
    };

    public int PizzaId { get; set; }
    public ECrust Crust { get; set; }
    public double Price { get; set; }
    public EPizzaSize Size { get; set; }
    public List<EToppings> Toppings { get; set; }

    public Pizza()
    {
      Crust = ECrust.Regular;
      Price = Cost[EPizzaSize.Medium];
      Size = EPizzaSize.Medium;
      Toppings = new List<EToppings>
      {
        EToppings.Cheese,
        EToppings.Sauce
      };
    }

    public Pizza(ECrust crust, EPizzaSize size, EToppings top1)
      : this()
    {
      Crust = crust;
      Price = Cost[size];
      Size = size;
      Toppings.Add(top1);
    }

    public Pizza(ECrust crust, EPizzaSize size, EToppings top1, EToppings top2)
      : this()
    {
      Crust = crust;
      Size = size;
      Price = Cost[size];
      Toppings.Add(top1);
      Toppings.Add(top2);
    }

    public Pizza(ECrust crust, EPizzaSize size, EToppings top1, EToppings top2, EToppings top3)
            : this()
    {
      Crust = crust;
      Price = Cost[size];
      Size = size;
      Toppings.Add(top1);
      Toppings.Add(top2);
      Toppings.Add(top3);
    }
    public Pizza(ECrust crust, EPizzaSize size, EToppings top1, EToppings top2, EToppings top3, EToppings top4)
            : this()
    {
      Crust = crust;
      Price = Cost[size];
      Size = size;
      Toppings.Add(top1);
      Toppings.Add(top2);
      Toppings.Add(top3);
      Toppings.Add(top4);
    }
    public Pizza(ECrust crust, EPizzaSize size, EToppings top1, EToppings top2, EToppings top3, EToppings top4, EToppings top5)
            : this()
    {
      Crust = crust;
      Price = Cost[size];
      Size = size;
      Toppings.Add(top1);
      Toppings.Add(top2);
      Toppings.Add(top3);
      Toppings.Add(top4);
      Toppings.Add(top5);
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)

我正在尝试做这样的事情:

    Toppings.Add(top1, top2, top3, top4);
Run Code Online (Sandbox Code Playgroud)

Bre*_*ont 7

要回答您的确切问题:

查看 List.AddRange(...) 函数:https ://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.addrange?view=netframework-4.7.2

语法如下所示:

Toppings.AddRange(new List<EToppings>() {top1, top2, top3, top4});
Run Code Online (Sandbox Code Playgroud)

要解决根本问题:

创建许多不同的构造函数,它们仅在额外“顶部”参数的数量上有所不同,这有点麻烦。您可以/应该通过paramsC# 中的关键字将所有这些压缩到一个具有可变长度参数的构造函数中。

public Pizza(ECrust crust, EPizzaSize size, params EToppings[] toppings) : this()
{
  Crust = crust;
  Price = Cost[size];
  Size = size;
  Toppings.AddRange(toppings);
}
Run Code Online (Sandbox Code Playgroud)