ich hab ein kleines Problem mit der List<T>. Ich möchte diese gern erweitern, so dass nur einzigartige Werte drin sind, aber da die geforderten Funktionen ni virtual sind bleibt mir nur new, was zwar funktioniert aber ja auch seine Fallstricke haben soll. Hier mein Code, ich hoffe ihr habe ne Idee wie ich das verbessern kann:
public class UniqueList<T> : List<T> { public new void Add(T item) { if (!this.Contains(item)) base.Add(item); } public new void AddRange(IEnumerable<T> collection) { foreach (var e in collection) this.Add(e); } public new void Insert(int index, T item) { if (!this.Contains(item)) base.Insert(index, item); } public new void InsertRange(int index, IEnumerable<T> collection) { int offset = 0; foreach (var e in collection) { if (!this.Contains(e)) { this.Insert(index + offset, e); offset++; } } } }
wenn du statt List<T> die Collection System.Collections.ObjectModel.Collection<T> verwendest kannst du InsertItem und RemoveItem überschrieben. Die Methoden werden aufgerufen wenn über Add bzw. Remove Items hinzugefügt oder entfernt werden.
[Edit] Ich sehe grade, die Methode "SetItem" kannst du auch überschreiben... Damit könntest du auch nachträgliche Modifikationen unterbinden.
So wie du es gemacht hast ist es auf jeden Fall nicht zu empfehlen. Wenn deine Liste von einer Funktion verarbeitet wird die eine Liste vom Typ List<T> erwartet, werden nicht deine Implementierungen verwendet, sondern die Implementierung der Klasse List<T>. Das kann zu bösen Fehlern führen.