用户对象输入到数据列表中

-1 c# arrays collections list

我有一个程序试图创建一个典型的汽水箱程序,用户可以从列表中选择并添加到24的数组,以代表苏打水箱.但我希望它打印出这里的对象列表,以检查我的代码是否在我继续之前没有被破坏.除了我无法打印出数据.我用foor循环尝试了这个但它没有用

public class BeverageData
{
      public string Name { set; get; }
      public string Type { set; get; }
      public decimal Price { set; get; }
      public int Size { get; set; }
}

class Beverages : IEnumerable<BeverageData>
{
    public static void BeverageRun()
    {
        var crate = new List<BeverageData>();

        //Add some items to it
        var newBeverage= new BeverageData();
        newBeverage.Name = "Fanta";
        newBeverage.Price = 0.75M;
        newBeverage.Type = "Soda";
        crate.Add(newBeverage);

        crate.Add(new BeverageData() { Name = "Pepsi", Price = 0.25M, Type = "Soda" });

        //Prompting the user


        crate.Add(PromptUserForBeverage());

        foreach (var beverage in crate)
        {
            Console.WriteLine(beverage);
        }
    }

    public void RemoveBeverage(string name)
    {

        var beverages = (from i in _items where String.Compare(i.Name, name, true) == 0 select i).FirstOrDefault();

        if (beverages != null)
            _items.Remove(beverages);
    }
    public IEnumerator<BeverageData> GetEnumerator()
    {
        return _items.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    private readonly List<BeverageData> _items = new List<BeverageData>();

    static BeverageData PromptUserForBeverage()
    {
        var beverage = new BeverageData();

        Console.WriteLine("Enter name: ");
        beverage.Name = Console.ReadLine();

        beverage.Price = GetDecimal("Enter cost: ");

        Console.WriteLine("Enter type: ");
        beverage.Type = Console.ReadLine();

        return beverage;
    }

    static decimal GetDecimal(string message)
    {
        do
        {
            Console.WriteLine(message);
            var input = Console.ReadLine();

            decimal result;
            if (Decimal.TryParse(input, out result))
                return result;

            Console.WriteLine("Invalid number");
        } while (true);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑主类:

public static object MyProperty
        {
            get { return beverages; }
            set { beverages = new Crate}
        }
        static void Main(string[] args)
        {
            //var beverages = new Crate();
            ShowMenu();
            // Wait for input before closing
            Console.WriteLine("\nDone!\nPress any key to exit...");
            Console.ReadKey();
        }
        public static void ShowMenu()
        {
            Console.WriteLine("[1] Add Bottle from existing list to Bottle Crate");
            Console.WriteLine("[2] Remove Bottle from Bottle Crate");
            Console.WriteLine("[3] Show Bottle Crate");
            Console.WriteLine("[4] Add Beverage to list");
            Console.WriteLine("[5] Remove Beverage from list");
            Console.WriteLine("[6] Sort Bottles in Bottle Crate");
            Console.WriteLine("[7] Sort Beverages in list");

            ConsoleKeyInfo info = Console.ReadKey();
            int selection;
            int.TryParse(info.KeyChar.ToString(), out selection);

            switch (selection)
            {
                case 1:
                    var numBevs = Math.Max(GetInt("How many beverages would you like to enter: "), 0);

                    for (int i = 0; i < numBevs; i++)
                    {
                        Console.WriteLine($"\nEnter beverage #{i + 1} info");
                        Console.WriteLine("-----------------------");
                        beverages.Add(Crate.GetBeverageFromUser());
                        Console.WriteLine("-----------------------\n");
                    }
                    numBevs = Math.Max(GetInt("How many would you like to be auto-added: "), 0);

                    for (int i = 0; i < numBevs; i++)
                    {
                        beverages.Add(Crate.GetRandomBeverage());
                    }
                    Console.WriteLine("-----------------------\n");
                    ShowMenu();
                    break;
                //case 2:
                //    Remove_Bottle();
                //    ShowMenu();
                //    break;
                case 3:
                    Console.WriteLine("\nHere are the contents of the crate:\n");
                    Console.ForegroundColor = ConsoleColor.Green;
                    beverages.PrintBeverages();
                    Console.ResetColor();
                    ShowMenu();
                    break;
                //case 4:
                //    BeverageRun();
                //    ShowMenu();
                //    break;
                //case 5:
                //    Remove_Beverage();
                //    ShowMenu();
                //    break;
                //case 6:
                //    Sort_Bottles();
                //    ShowMenu();
                //    break;
                //case 7:
                //    Sort_Beverages();
                //    ShowMenu();
                //    break;
                //case 8:
                //    Calc_Total();
                //    ShowMenu();
                //    break;
                case 9:
                    break;
                default:
                    ShowMenu();
                    break;
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jun*_*ang 5

public static void BeverageRun()
{
    var crate = new List<BeverageData>();

    //Add some items to it
    var newBeverage= new BeverageData();
    newBeverage.Name = "Fanta";
    newBeverage.Price = 0.75M;
    newBeverage.Type = "Soda";

    crate.Add(newBeverage);
    crate.Add(new BeverageData() { Name = "Pepsi", Price = 0.25M, Type = "Soda" });

    //Prompting the user
    crate.Add(PromptUserForBeverage());

    foreach (var beverage in crate)
    {
        PrintBeverage(beverage);
    }
}

static string PrintBeverage(BeverageData beverage)
{
    Console.WriteLine("Name: " + beverage.Name + ", Price: $" + beverage.Price + ", Type: " + beverage.Type);
}
Run Code Online (Sandbox Code Playgroud)

我假设您打算在crate列表中循环.但是,这样做会打印饮料对象.不是饮料的价值.因此,如果您想查看饮料的价值,您可能需要更改它.

编辑

作为埃德宾吉提到的,你也可以只覆盖ToString()BeverageData.这样做会是这样的.

public class BeverageData
{
    public string Name { set; get; }
    public string Type { set; get; }
    public decimal Price { set; get; }
    public int Size { get; set; }

    public override string ToString()
    {
        return "Name: " + Name + ", Price: $" + Price + ", Type: " + Type;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在foreach循环中:

foreach (var beverage in crate)
{
    Console.WriteLine(beverage);
}
Run Code Online (Sandbox Code Playgroud)

  • @JsonDork你也可以覆盖`BeverageData`的`ToString()`方法. (3认同)