| 

.NET C# Java Javascript Exception

3
Hallihallo,


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++;
}
}
}
}



Danke schonmal!
News:
09.10.2011
Barados 288 1 7
6 Antworten
3
Hey,

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.

Viele Grüße,
Tachyon
09.10.2011
Tachyon 690 7
Herzlichen Dank. Das hilft mir gut weiter... Sieht man mal wieder: Basisklasse finden will gelernt sein!
Barados 10.10.2011
Kein Problem :). Wenn dir die Antwort geholfen hat kannst du sie übrigens auch als korrekte Antwort akzeptieren ;)
Tachyon 10.10.2011
Und wie geht das?^^
Barados 11.10.2011
Klick das grüne Hakerl unter dem Score links neben der Antwort (fühlt sich ähnlich an wie ne Checkbox ;-)
ffordermaier 11.10.2011
1
Entweder IList<T> oder IEnumerable<T> implementieren und jede benötigte Funktion ausprogrammieren.
09.10.2011
lbm1305 849 1 8
0
Hallo,

was sprcht gegen die Verwendung von HashSet<T>?

mfG Gü
09.10.2011
gfoidl 9,4k 3 5
0
..........
02.11.2017
muffi 1,4k 1 9
0
..........
16.11.2017
muffi 1,4k 1 9
0
..........
29.11.2017
muffi 1,4k 1 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH