In meinem aktuellen Projekt des ArmyGen arbeite ich viel mit ObserveableCollections, da ich viele Abläufe und Änderungen überwachen muss und ggf. andere Objekte davon informiert werden müssen. Eine sehr schicke Sache die Microsoft da mit dem .NET 3.0 eingeführt hat. Jedes mal wird man automatisch benachrichtigt, wenn einer Collection ein Element hinzugefügt, entfernt, bewegt, ersetzt oder sogar die ganze Collection gecleared wird.
Das schöne ist auch, dass in den Eventargs beim hinzufügen und entfernen von Elementen gesagt wird welche Elemente genau behandelt wurden. Einen Haken jedoch gibt es trotzdem. Beim Clear() der Collection wird in den Eventargs keine Angabe darüber gemacht welche Elemente alle verschwunden sind. Wie ich finde eine sehr ärgerliche Sache denn ich nutze oft Clear().
Microsoft wird wohl Gründe für die Entscheidung gehabt haben (vermutlich aus Performance-/Speichergründen), jedoch ist es für mich ein wichtiges Feature auch bei einem Clear() zu erfahren was vorher in der Liste gesteckt hat. Darum habe ich ich meine eigene ObserveableCollection entworfen, bzw. die bestehende modifiziert.
Desweiteren habe ich bei der .NET ObservableCollection eine AddRange() Methode vermisst welche ich ebenfalls in meiner Collection mit eingebaut habe.
Update : Ich habe ganz vergessen eine RemoveRange(IEnumerable
Deutsch
Englisch
In diesem zweiten Beitrag zum Thema “Do’s and Don’ts” möchte ich ein Szenario ansprechen, welches mich erst vor kurzem in meinem ArmyGen Projekt beschäftigt hat. Es geht um das “Klonen” von Objekten. Das .NET Framework bietet nur ein Interface, welches sich “IConeable” nennt, an um das Klonen von Objekten einzubinden. Unglücklicherweise besagt die einzige Methode in diesem Interface (“Clone()“) nicht um welche Art des Klonens es sich dabei handelt. 

