Marko Apfel - Afghanistan/Belgium/Germany

Management, Architecture, Programming, QA, Coach, GIS, EAI

  Home  |   Contact  |   Syndication    |   Login
  187 Posts | 2 Stories | 201 Comments | 4 Trackbacks

News



Twitter | LinkedIn | Xing

Archives

Post Categories

BizTalk

C#

Enterprise Library

SAP

SQL Server

Technologie

in unten stehendem Code ist ein Anti-Pattern, welches immer wieder im ArcObjects-Kontext zu beobachten ist.

if (element is IMapSurroundFrame)
{
    IMapSurround mapSurround = ((IMapSurroundFrame)element).MapSurround;
    ..

Es wird eine is-Abfrage gemacht (element is IMapSurroundFrame) und dann ein Stück später der tatsächliche Cast ((IMapSurroundFrame)element).

Im Hintergrund macht die is-Abfrage nichts anderes als einen Cast und schaut, ob der geht.
Da ein Cast immer eine "teure" Angelegenheit ist, sollte man ihn sparsam verwenden .. insbesondere in performance relevanten Ecken.

Besser ist es sofort einen as-Cast zu machen & mit einer != null-Prüfung in den if-Zweig einzusteigen.
Dann ist man gleich auch sicher, dass der Zugriff .MapSurround nicht wegen eines null-Elements aussteigt.

Darüberhinaus noch ein kleiner kosmetischer Tipp für den Umgang mit Schleifen im .Next()-Kontext:
Oft kann man die Zeilen:

IElement element = graphicsContainer.Next();
while (element != null)
{
    ...
      element = graphicsContainer.Next();
}

etwas smarter umformen zu:

IElement element;
while (null != (element = graphicsContainer.Next()))
{
    ...
}

Zwar ist nur eine Zeile gespart, aber die direkte .Next()-Zuweisung im Header bringt die Semantik viel besser zum Ausdruck.

posted on Thursday, October 29, 2009 12:35 PM