Autor Beitrag
relapse
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Mi 13.06.12 15:27 
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?
relapse Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Mi 13.06.12 15:37 
Ich glaube, ich hab' die Antwort gefunden:
social.msdn.microsof...0b-93a4-55a9426831c5
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 13.06.12 16:08 
In dem Fall würde ich doch eher is vorziehen :gruebel: ...

_________________
>λ=
relapse Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Fr 15.06.12 08:14 
Welche Vorteile bringt das (außer kürzerer Schreibweise)?
KanneM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26
Erhaltene Danke: 1

Win98, Win XP, Win 7
Java, C#
BeitragVerfasst: 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!

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
if(variable is int)
{
//Nicht zwingend notwendig, nur für bestimmte Aktionen
(variable as int).AKTION();
}


Natürlich muss die Variable vorher zugewiesen sein!

LG
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Fr 15.06.12 09:53 
Danke an Alle!

Wieder was dazu gelernt. :shock:
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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!):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
ArgumentException argex = e as ArgumentException;
if (argex != null)
{
  string paramName = argex.ParamName;
  // ...
}
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 15.06.12 13:45 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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 ;) .

_________________
>λ=