code it

Martins Tech Blog

Du bekommst mich nicht!

Ich finde ja die Methode Contains auf generischen Listen sehr praktisch. Um so überraschter war ich nun heute, als ich wie selbstverständlich auf eine PointCollection ein Contains aufrufen wollte und mit einer für mich sehr unerwarteten ArgumentException belohnt wurde.

Mein Code ist ganz einfach nachgestellt: Eine PointCollection wird mit 3 Punkten initialisiert, ich hole mir eine Referenz auf den ersten Punkt und verwende dann die Methode Contains, um zu prüfen, ob dieser Punkt in der Liste enthalten ist.

var points = new PointCollection {
   new Point(50, 50),
   new Point(100, 100),
   new Point(150, 150)
};

var point = points[0];

var isInList = points.Contains(point);

Sieht gar nicht so kompliziert aus und sollte eigentlich funktionieren. Aber: PointCollection ist natürlich keine List<Point>, sondern eine PresentationFrameworkCollection<Point>. Trotzdem hätte ich erwartet, dass dieser Typ in der Lage ist, ein enthaltenes Member zu finden.

Abhilfe schafft hier die ExtensionMethod auf IEnumerable mit dem gleichen Namen. Dieser kann als zweiter Parameter ein Comparer übergeben werden. Das bedeutet natürlich zusätzlichen Aufwand - auch wenn dieser hier sehr marginal ist. Aber warum das Rad neu erfinden. Es gibt ja bereits einen Default-Comparer der genau diese Arbeit übernehmen kann. Dazu übergibt man der ExtensionMethod einfach im zweiten Parameter den Wert null.

var points = new PointCollection {
   new Point(50, 50),
   new Point(100, 100),
   new Point(150, 150)
};

var point = new Point(50, 50);

var isInList = points.Contains(point, null);

Keine Fehlermeldung mehr und das Ergebnis stimmt auch.

Frohe Weihnachten und ein erfolgreiches Jahr 2011

Die letzen Tage im Dezember sind ja quasi prädestiniert dazu, einmal etwas intensiver als sonst und mit einem Jahreshorizont zu reflektieren und Kraft für neue und spannende Herausforderungen zu sammeln.

Alles in allem war es ein sehr ereignisreiches Jahr für mich. Zuerst einmal gab es viele spannende Projekte - viele davon mit neuen interessanten Themengebieten und eigenen Problemen, die es zu lösen galt. Technologisch ging es dabei über Visual Studio Team System, SQL Server 2008, SharePoint 2010, ASP.NET (MVC), WPF, Silverlight und ganz neu auch Silverlight für Windows Phone. Damit verbunden waren natürlich auch auch eine Menge Herausforderungen und einige davon haben auch ihren Platz hier im Blog gefunden. Alles in allem sind damit über 30 Posts zusammengekommen, die mir als Gedankenstütze und euch als meinen Bloglesern als Hilfe dienen können.

Was gab's noch? In diesem Jahr war meine Premiere als Autor in der dotnetpro mit einem Artikel zu Message Queuing, es haben mehrere Windows Phone 7 Apps an denen ich maßgeblich mit gearbeitet habe ihren Weg in den Marketplace gefunden. Ich war bei fast allen Treffen der .NET Usergroup Dresden mit dabei und habe dort entweder was spannendes erfahren oder selbst was spannendes erzählt.

Zusammengefasst: Ja, es war ein interessantes Jahr und ich möchte an dieser Stelle euch allen für euer stetiges Interesse danken. Euer Feedback in Twitter oder Facebook oder auch eure Kommentare zeigen mir, dass es sich lohnt, hier weiter zu machen. In diesem Zusammenhang freue ich mich natürlich auch über Feedback, was ich vielleicht besser machen könnte oder ob ich ein Thema etwas detaillierter behandeln sollte.

Soweit es sich bisher voraussagen lässt, wird das nächste Jahr mindestens genauso interessant wie das aktuelle. In diesen Sinne: Stay tuned, ein paar ruhige Tage und dann volle Power für 2011.