Я хочу отобразить некоторые продукты, используя массив объектов в C#

#c# #arrayobject

#c# #arrayobject

Вопрос:

У меня есть класс

 public class Product
{
    private long id;   
    private String name;  
    private String internCode;  
    private String producer;// 

    public long Id { get => id; set => id = value; }
    public string Name { get => name; set => name = value; }
    public string InternCode { get => internCode; set => internCode = value; }
    public string Producer { get => producer; set => producer = value; }

    public void display()
    {
        Console.WriteLine("Products: "  Id "  " Name   "["  InternCode   "] "   Producer);
    }
}
  

и это класс Program

  public static void Main(string[] args)
    {
        Product prod1 = new Product();
        Product prod2 = new Product();
        Console.WriteLine("The Id for the first product is:");
        prod1.Id = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("The name of the first product is:");
        prod1.Name = Console.ReadLine();
        Console.WriteLine("The Intern Code is:");
        prod1.InternCode = Console.ReadLine();
        Console.WriteLine("The producer is:");
        prod1.Producer = Console.ReadLine();

        Console.WriteLine();
        Console.WriteLine("The Id for the second product is:");
        prod2.Id = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("The name for the second product is:");
        prod2.Name = Console.ReadLine();
        while (prod2.Name == prod1.Name)
        {
            Console.WriteLine("This product has already been introduced. Please introduce a new product:");
            prod2.Name = Console.ReadLine();
        }
        Console.WriteLine("The intern code is:");
        prod2.InternCode = Console.ReadLine();
        Console.WriteLine("The producer is:");
        prod2.Producer = Console.ReadLine();


        Console.WriteLine("The products are:");
        Console.WriteLine();
        prod1.display();
        Console.WriteLine();
        prod2.display();
        Console.WriteLine();
        Console.ReadKey();            
    }
  

Я хочу прочитать продукты с помощью пользовательского ввода и отобразить их, используя массив объектов Product [] array1=new Product [] , вместо использования объектов prod1 и prod2.
Пожалуйста, дайте мне любой пример или любую ссылку, чтобы документировать, как это решить.Спасибо!

Комментарии:

1. Вам действительно нужен массив ? В большинстве случаев вместо этого будет использоваться List<Product> . Тогда вы можете просто использовать List.Add () вместо того, чтобы изменять размер и копировать свой массив всякий раз, когда это необходимо изменить…

2. Я бы предпочел использовать массив, потому что это указано в указателе проблемы. Спасибо за решение!

3. @Idle_Mind Ну, да, хотя это добавляет много удобства, но List<T> по сути, это реализация массива (я имею в виду реализацию динамического массива)

4. Это немного не по теме и больше похоже на «обзор кода», но для дальнейшего использования вы можете поместить » n» (без кавычек) в начале или конце ваших параметров для консоли. WriteLine(), чтобы получить дополнительные строки и сократить беспорядок.

5. @Rahul верно, но вам не обязательно изменять его размер самостоятельно с помощью списка.

Ответ №1:

Я бы посоветовал вам использовать список, потому что у вас есть метод Add для добавления новых продуктов. Чтобы проверить, существует ли продукт, вы можете использовать любое расширение IEnumerable в Linq:

 var products = new List<Product>();
...
while (!lastuserinput.Equals("exit"))
{    
    var productName = Console.ReadLine(); 
    if (products.Any(product=>product.Name.Equals(productName))
    {
       Console.WriteLine("product already exists");
       continue;
    }
    ...
    productList.Add(new Product
    {
        ...
        Name = productName,
        ...
    };
...
}
  

Ответ №2:

 public class Product
{
    public long Id {get; set;}   
    public String Name {get; set;}  
    public String InternCode {get; set;}  
    public String producer {get; set;}

    public overrides string ToString()
    {
        return $"Products: {Id}  {Name}[{InternCode}] {Producer}";
    }
}

public static void Main(string[] args)
{
    var products = new List<Product>();

    bool again = true;
    while(again)
    {
        var product = new Product();
        Console.WriteLine("The Id for the first product is:");
        product.Id = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("The name of the first product is:");
        product.Name = Console.ReadLine();
        Console.WriteLine("The Intern Code is:");
        product.InternCode = Console.ReadLine();
        Console.WriteLine("The producer is:");
        product.Producer = Console.ReadLine();
        products.Add(product);

        Console.WriteLine("nEnter another product (y/n)?");
        again = (Console.ReadKey(true).Key.ToString().ToLower() == "y");
    }

    Console.WriteLine("nThe products are:");
    foreach(var product in products)
    {
        Console.WriteLine(product);
    }
    Console.ReadKey(true);            
}