Miktar güncelleme
UpdateQuantity ve RemoveProduct ile sepeti yönetmeyi öğrenirsin.
Miktar güncelleme
Sepette bir ürünün miktarını değiştirmek için UpdateQuantity metodunu yazacağız. İmza: public void UpdateQuantity(string name, int quantity). Gövdede foreach ile ürünleri gezer, adı eşleşen ürünün Quantity özelliğini güncellersin.
Ayrıca RemoveProduct metoduyla ürünü sepetten çıkaracağız. Bu, for döngüsüyle dizin geriye gidip items.RemoveAt(i) çağrısı yaparak yapılır; geriye gitmek silmeye bağlı kaymaları güvenli kılar.
Geriye dönük silme
Bir listeyi foreach ile gezerken eleman silmek tehlikelidir; derleyici hata verir. Bunun yerine for döngüsü son dizinden geriye doğru gitmeli: for (int i = items.Count - 1; i >= 0; i--).
Geriye gitmek, bir silme yapıldığında sonraki dizinlerin kaymasını sorunsuz karşılar. Bu, listeyi değiştirerek gezmenin güvenli tek yoludur; LINQ ile RemoveAll da alternatiftir ama burada açık döngüyü öğreniyoruz.
Uygulama UpdateQuantity ve RemoveProduct yaz
Cart sınıfına iki metot ekle. public void UpdateQuantity(string name, int quantity): foreach ile ürünleri gez, adı eşleşen ürünün Quantity'sini güncelle. public void RemoveProduct(string name): for (int i = items.Count - 1; i >= 0; i--) ile geriye git, adı eşleşen ürünü items.RemoveAt(i) ile sil. Main Defter'i ekleyip miktarını 5 yapıyor ve Kalem'i silmeye çalışıyor; GetSubtotal 25*5 = 125 vermeli.
Örnek çözümü göster
public void UpdateQuantity(string name, int quantity) { foreach (var p in items) { if (p.Name == name) p.Quantity = quantity; } }
public void RemoveProduct(string name) { for (int i = items.Count - 1; i >= 0; i--) { if (items[i].Name == name) items.RemoveAt(i); } }
Örnek çözüm:
using System;
using System.Collections.Generic;
class Product
{
public string Name { get; set; }
public double Price { get; set; }
public int Quantity { get; set; }
}
class Cart
{
private List<Product> items = new List<Product>();
public void AddProduct(Product product) { items.Add(product); }
public double GetSubtotal()
{
double sum = 0;
foreach (var p in items) sum += p.Price * p.Quantity;
return sum;
}
public void UpdateQuantity(string name, int quantity)
{
foreach (var p in items)
{
if (p.Name == name) p.Quantity = quantity;
}
}
public void RemoveProduct(string name)
{
for (int i = items.Count - 1; i >= 0; i--)
{
if (items[i].Name == name) items.RemoveAt(i);
}
}
}
class Program
{
static void Main()
{
var cart = new Cart();
cart.AddProduct(new Product { Name = "Defter", Price = 25, Quantity = 2 });
cart.UpdateQuantity("Defter", 5);
cart.RemoveProduct("Kalem");
Console.WriteLine(cart.GetSubtotal());
}
}
Kendini test et
-
List üyesini işlevine eşle
- items.Count
- Eleman sayısı
- items.RemoveAt
- Dizinle silme
- items.Add
- Sonuna ekleme
- items[i]
- Dizinle erişim
-
cart.UpdateQuantity("Defter", 5) ne yapar?
cart.UpdateQuantity("Defter", 5);- Defter ürününün miktarını 5 yapar
- Defter ürününü siler
- Yeni Defter ekler
- Toplamı 5 yapar
Cevabı göster
Defter ürününün miktarını 5 yapar — Doğru. UpdateQuantity adı eşleşen ürünün Quantity özelliğini günceller.
-
items.RemoveAt çağrısını yaz
for (int i = items.Count - 1; i >= 0; i--) { if (items[i].Name == name) ____(i); }Cevabı göster
for (int i = items.Count - 1; i >= 0; i--) { if (items[i].Name == name) items.RemoveAt(i); }