Entwickler-Ecke
C# - Die Sprache - Datentyp zur Laufzeit ermitteln
relapse - Mi 13.06.12 15:27
Titel: Datentyp zur Laufzeit ermitteln
Hallo! Meine Situation ist: Ich habe benutzerdefinierte Exceptions, alle von der Basisklasse Exception abgeleitet. Ich möchte aber alle Exceptions mit einer einzigen Error-Handling-Methode "bearbeiten", die dann einen Parameter vom Typ Exception bekommt. Wie kann ich dann zur Laufzeit feststellen von welchem Datentyp jeweilige Exception ist?
Kha - Mi 13.06.12 16:08
In dem Fall würde ich doch eher is vorziehen :gruebel: ...
relapse - Fr 15.06.12 08:14
Welche Vorteile bringt das (außer kürzerer Schreibweise)?
KanneM - Fr 15.06.12 09:06
Meiner Meinung nach ist es schlicht das einfachste und effektivste. Allerdings benutze ich es auch nur für polymorphe Zwecke!
C#-Quelltext
1: 2: 3: 4: 5:
| if(variable is int) { (variable as int).AKTION(); } |
Natürlich muss die Variable vorher zugewiesen sein!
LG
Ralf Jansen - Fr 15.06.12 09:45
is unterstützt auch Ableitungen. Es testet also eher Zuweisbarkeit als Gleichheit. Zum Beispiel ein Test auf "is Object" würde immer true liefern. Ist in deinem Fall vermutlich geeigneter da wenn man explizit mit eigenen Exceptions arbeitet irgendeine Art von Hierarchie herausarbeitet und man dann so Fragestellung braucht wie 'ist dieses Exception eine ServerException oder ClientException' um danach erst denn konkreten Typ zu ermitteln. Wenn man nur auf Namensgleichheit der Typen testet ist man da eingeschränkt.
relapse - Fr 15.06.12 09:53
Danke an Alle!
Wieder was dazu gelernt. :shock:
Th69 - Fr 15.06.12 12:19
Kurzer Hinweis von mir bzgl.
is und
as:
dies funktioniert nur bei Referenztypen (also
nicht bei Wertetypen wie in dem obigen Beispiel
int).
Wenn man sowieso den konkreten Datentypen braucht, sollte man jedoch statt
is und anschließendem 'casten' gleich
as verwenden (und dann auf
null prüfen!):
C#-Quelltext
1: 2: 3: 4: 5: 6:
| ArgumentException argex = e as ArgumentException; if (argex != null) { string paramName = argex.ParamName; } |
Kha - Fr 15.06.12 13:45
Th69 hat folgendes geschrieben : |
dies funktioniert nur bei Referenztypen (also nicht bei Wertetypen wie in dem obigen Beispiel int). |
Um das zu präzisieren: Ein Double
ist kein Int, aber ein geboxter Int
ist ein Int. In der Praxis sollte aber sowieso nur der zweite Fall relevant sein, im ersten sind schließlich beide Typen schon statisch bekannt ;) .
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!