Как вывести содержимое 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 шт):
class Product
{
//добавить:
public string ShowNameAndDescr => $"{ProductName}\t{Description}"
//функция ShowProductList поменять Console.WriteLine(product); на
public void ShowProductList(List<Product> List)
{
//код до не менять
Console.WriteLine(product?.ShowNameAndDescr);
//код после не менять
}
}
Вам необходимо переопределить метод 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}");
}