Как вывести содержимое list? c#

Выводит вот это: ConsoleApp2.Product ConsoleApp2.Product ConsoleApp2.Product Надо чтобы он вывел содержимое этого списка

List<Product> products = new List<Product>() { new Product("Апельсин", "999"), new Product("Fll", "Beat"), new Product("Раб", "Ч") };

bool isOn = true;

while (isOn)
{
    Console.WriteLine("Какое действие хотите выполнить?");
    Console.WriteLine("1 - Увидеть инвентарь у продавца, 2 - Купить, 3 - Запросить название и описание продукта, 4 - Выйти из магазина");
    int userInput = Convert.ToInt32(Console.ReadLine());
    switch (userInput)
    {
        case 1:
            for (int i = 0; i < products.Count; i++)
            {
                Console.WriteLine((products[i]));
            }
            break;

        case 2:
            break;

        case 3:
            for (int i = 0; i < products.Count; i++)
            {

            }
            break;

        case 4:
            isOn = false;
            break;
    }
}


class Product
{
    public string ProductName, Description;

    public Product(string productName, string description)
    {
        ProductName = productName;
        Description = description;
    }

    //функция не работает, сам не понимаю почему
    public void ShowProductList(List<Product> List)
    {
        foreach (var product in List)
        {
            Console.WriteLine(product);
        }
    }
}

Ответы (2 шт):

Автор решения: Blackmeser
class Product
{
    //добавить:
    public string ShowNameAndDescr => $"{ProductName}\t{Description}"
    //функция ShowProductList поменять Console.WriteLine(product); на 
    public void ShowProductList(List<Product> List)
    {
        //код до не менять
        Console.WriteLine(product?.ShowNameAndDescr);
        //код после не менять
    }
}
→ Ссылка
Автор решения: Aarnihauta

Вам необходимо переопределить метод ToString(). Он вызывается, когда вы пытаетесь передать объект класса Product в метод Console.WriteLine().

Т.к он у вас изначально не был переопределен (ключевое слово override в сигнатуре метода), то выводилось полное имя класса (т.е ПространствоИмен.НазваниеКласса, в вашем случае ConsoleApp2.Product). Метод ToString() наследуется от класса object (от него в принципе все классы, структуры наследуются, просто неявно.)

Про переопределения метода ToString() можно почитать тут

class Product
{
   public string Name;
   public int Description;
   //Ваши методы и конструкторы
   //...
   
   public override string ToString()
   {
      return $"{Name} - {Description}";
   }
}

Так же, вы можете выводить непосредственно поля вашего класса, обращаясь к объекту:

List<Product> products = new List<Product>(); //допустим он заполнен элементами

foreach(Product item in products)
{
   Console.WriteLine($"{item.Name} - {item.Description}");
}
→ Ссылка