#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);
}
}
}