@Shinkero
Trader, Investor, C# student

Как изменить значения объекта из списка, если список его содержит?

Имеется список, состоящий из объектов.
class Program
{
    List<Item> items = new List<Item>;
    items.Add(new Item(){ItemName = "Ball", ItemID = 10, ItemCost = 3})
    items.Add(new Item(){ItemName = "Toy", ItemID = 14, ItemCost = 15})
}

Класс объектов:
public class Item
{
    public string ItemName { get; set;}
    public int ItemID { get; set; }
    public double ItemCost { get; set;}
}


Требуется проверить на наличие в этом списке объекта с указанным string (поиск по имени), и, если этот элемент присутствует - изменить его ItemID и ItemCost.
Каким образом я могу это реализовать?
Спасибо большое!

p.s.: Пример здесь сделан очень примитивный. В реальности значения ItemID и ItemCost будут изменяться очень часто, а сам список будет содержать огромное кол-во объектов.
  • Вопрос задан
  • 93 просмотра
Решения вопроса 3
edward_freedom
@edward_freedom
public class Item
        {
            public Item(string name, int id, double cost)
            {
                Name = name;
                Id = id;
                Cost = cost;
            }

            public string Name { get; set; }
            public int Id { get; set; }
            public double Cost { get; set; }

            public override string ToString()
            {
                return $"Id: {Id}, Name: {Name}, Cost: {Cost}";
            }
        }

        static void Main(string[] args)
        {
            var findName = "Ball";

            var items = new List<Item>
            {
                new Item("Ball", 10, 3),
                new Item("Toy", 14, 15)
            };

            var item = items.FirstOrDefault(product => product.Name.Contains(findName));

            if (item != null)
            {
                item.Cost = 100;
                item.Id = 999;
            }

            Console.WriteLine(string.Join(Environment.NewLine, items));

            Console.ReadKey();
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
Если будет частый поиск по имени, то нужно складывать их не в коллекции, а словари.
new Dictionary<string, Item>().Add(item.ItemName, item);


Если всё же хочешь из списка, то подключаешь System.Linq
items.FirstOrDefault(i => i.ItemName == "Toy");
Ответ написан
Item item = items.Find(i => i.ItemName == "Ball");
if (item != null) {
	item.ItemID = 8;
	item.ItemCost = 1000;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы