Tags: , , | Categories: .NET Framework 2.0 Posted by AlexanderZeitler on 8/5/2006 7:20 AM | Comments (0)

Generische Listen, die mit .NET 2.0 eingeführt wurden, sind eine feine Sache. Unter anderem bieten Sie die Möglichkeit, Objekte nach bestimmten Kriterien suchen zu lassen. Leider zeigt das Beispiel in der MSDN die Implementierung der Suchfunktion nur für einfache Typen wie Strings. Wie man eigene Objekte anhand der Eigenschaften suchen kann, zeigt das folgende Beispiel.

Aufgabenstellung: Wir haben Produkte, die in einem Warenkorb liegen können und es soll geprüft werden, ob ein bestimmtes Produkt bereits im Warenkorb liegt. Natürlich könnte man dies mit foreach erschlagen, aber das soll hier ja nicht gezeigt werden ;-).

Zunächst benötigen wir ein eine Klasse Product.cs - zur Demonstration nur mit den relevanten Implementierungen dargestellt:

public class Product() {
  private Guid guid;
  private string title;

  public Guid Guid {
    get { return this.guid; }
    set { this.guid = value; }
  }

  public string Title {
    get { return this.title; }
    set { this.title = value; }
  }
}

Weiterhin benötigen wir eine Klasse zur Abbildung der Produkte im Warenkorb, z.B. CartItem:

public class CartItem() {
  private Guid productGuid;
  private string title;
  private Guid guid;

  public Guid Guid {
    get { return this.guid; }
    set { this.guid = value; }
  }

  public Guid ProductGuid {
    get { return this.productGuid; }
    set { this.productGuid = value; }
  }

  public string Title {
    get { return this.title; }
    set { this.title = value; }
  }
}

Und schließlich wird noch der eigentliche Warenkorb Cart.cs benötigt:

public class Cart() {
  private Guid guid;
  private List<CartItem> items;

  public Guid Guid {
    get { return this.guid; }
    set { this.guid = value; }
  }

  public List<CartItem> Items {
    get { return this.items; }
    set { this.items = value; }
  }
}

Die Methoden zum Lesen und Schreiben der Daten habe ich zur besseren Übersicht hier weggelassen.

Um nun festzustellen, ob eine Instanz von Product bereits in Cart.Items vorhanden ist, ist folgender Code notwendig:

List<CartItem> existingItems = cart.Items.FindAll(delegate(CartItem item) {
    return item.ProductGuid == product.Guid;
}
);
if(0 == existingItems.Count) {
    // Produkt ist noch nicht im Warenkorb
}
else {
    // Produkt ist bereits im Warenkorb
}
Comments are closed