Как добавлять значение объекта в список в c# при каждом создании объекта и выводить список в конце

#c# #.net #list #object #icomparable

Вопрос:

Я новичок в программировании и пытаюсь добавлять объект каждый раз, когда объект создается в списке<>.

 Customer obj = new Customer(name="abc",price=23);
Customer obj = new Customer(name="efg",price=45);
 

Я хочу, чтобы цена и название были добавлены в список, и хотел бы уточнить цену, используя интерфейс Icomparable.
Может ли кто-нибудь объяснить это, пожалуйста, спасибо

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

1. Пожалуйста, перефразируйте вопрос, используя правильные предложения. Совершенно не ясно, чего вы пытаетесь достичь.

Ответ №1:

В соответствии с тем, что я понял из вашего вопроса, вы можете добавить статический список в свой класс клиентов и добавить цену в свой список внутри конструктора. Поэтому каждый раз, когда вы создаете объект этого класса, цена будет добавлена в ваш список.

Класс клиентов —

 public class Customer
{
    public string name { get; set; }
    public int price { get; set; }

    public static List<int> prices = new();
    
    public Customer(string name, int price)
    {
        this.name = name;
        this.price = price;
        prices.Add(price);
    }
}
 

Когда вы пытаетесь распечатать —

 Customer obj = new Customer(name: "abc", price: 23);
Customer obj1 = new Customer(name: "efg", price: 45);
foreach (var price in Customer.prices)
{
    Console.WriteLine(price);
}
 

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

1. Кстати, вы знаете, как сравнивать объекты с помощью интерфейса Icomparable? Я получаю ошибку, так как другой.объект становится нулевым.

2. Пожалуйста, предоставьте некоторый фрагмент кода и подробную информацию о проблеме(может быть в другой теме). Я постараюсь помочь.

Ответ №2:

Кстати, вы знаете, как сравнивать объекты с помощью интерфейса IComparable? Я получаю ошибку, так как other.object становится нулевым.

Я полагаю, вы хотите сравнить цену, которую я предполагаю? Если да, то я рекомендую вам создать общий список, цикл по каждому элементу добавляет каждый элемент из массива строк в список, в котором Конструктору передается строка. Я немного «переделал» ваш конструктор. Для сравнения вы можете использовать интерфейс IComparable (также может использоваться с IEnumerable), который вам также будет проще поддерживать в будущем

using System; using System.Collections.Generic; using System.IO;

 namespace ConsoleApp25
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] lines = {"abc;23","efg;45" };
            Customer[] customers = ReadFromStrArr(lines);
            Console.WriteLine(customers[0].price.CompareTo(customers[1].price));
        }

        static Customer[] ReadFromStrArr(string[] lines)
        {
            if (lines == null)
                throw new ArgumentNullException(nameof(lines));

            var result = new List<Customer>();

            foreach (var line in lines)
            {
                result.Add(new Customer(line));
            }

            return result.ToArray();
            
        }
    }
    public class Customer : IComparable<int>
    {
        public string name { get; set; }
        public int price { get; set; }

        

        public Customer(string line)
        {

            string[] data = line.Split(";");

            name = data[0];
            price = Convert.ToInt32(data[1]);

            // prices.Add(price); // ??
        }

        public int CompareTo(int other)
        {
            return price.CompareTo(other);
        }
    }
}