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

Article Categories

Archives

Post Categories

Image Galleries

BizTalk

C#

Enterprise Library

SAP

SQL Server

Technologie

Wie so oft im Leben sind manche Dinge auf den zweiten Blick komplexer als sie auf dem Ersten den Anschein haben.

Es kam die Anfrage, ob es nicht doch einen Unterschied zwischen "as" und "is" gibt & dann wurden noch ein paar Inputs gefunden, dass im Falle des "Überladens von Cast-Operatoren" mögliche Fallen lauern.

Für den Fall der Überladung muss man natürlich wissen, was der Programmierer bei der Überladung getrieben hat. Im ArcObjects-Kontext sollte man im Allgemeinen nicht in derartige Fallen laufen.

Die andere Geschichte (as mit anschließendem !null-Vergleich, is vs. direct) habe ich mit Stopwatch mal in verschiedenen Szenarien durchgemessen.

Wenn der Cast funktioniert sind alle 3 Varianten gleich schnell.
Das heißt aber auch, dass eine "is"-Abfrage mit nachgelagertem Direct-Cast doppelt so teuer ist wie ein einfacher as-Cast mit anschließendem !null-Vergleich.

Wenn der Cast mal geht & mal nicht geht sind as und is immer noch gleich schnell - aber der direct-Cast mit Exception-Wurf ist 1000mal langsamer!!!

Daher bleibt die Empfehlung, im Allgemeinen den "as"-Cast zu nehmen, stehen.

Ist man sich sicher, dass der Cast geht, kann auch ein Direct-Cast genommen werden. Dies ist unter Umständen sinnvoll  wenn sich die Ausdruckskraft des Codes erhöht.

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