Fehlernummer


SeeSharpNewBee

Erfahrenes Mitglied
Hi,

wie kann man von einer exception die nummer feststellen? Damit ich auf bestimmte fehler anders reagieren kann, und das für den anwender auch einfach ist wenn meine auswertungen der fehler in einer messagebox auftauchen als irgendwas kryptisches von microsoft! Danke
 

Christian Kusmanow

Erfahrenes Mitglied
Hallo SeeSharpNewBee!

Schön das Du dir darüber gedanken machst.
Wer kann schon was mit einer Checked Exception anfangen. ;)
Bau Dir doch eigene Exception-Klassen die Du von Exception ableitest
und mit den Parametern versiehst, die für die Ausnahmebehandlung notwendig sind.
Desweiteren würde ich Dir intern extra noch ErrorCodes empfehlen.
Diese könntest Du verwenden, um die entspechenden Fehlermeldungen in der
gewünschten Sprache auszugeben die Du in deinen Ressources hinterlegt hast.

MfG, cosmo
 

SeeSharpNewBee

Erfahrenes Mitglied
Ich hab mir jetzt was anderes überlegt, ich lege eine textdatei an, und wenn ein erwarteter fehler, jedenfalls von mir erwartet entsteht, dann durchsuche ich die datei nach der message, die der fehler zurückgibt, finde ich diesen fehler, wird die nummer aus der datei als rückgabewert verwendet, und diese nummer kann ich dann verwenden!

Falls es eine elegantere möglichkeit gibt, immer her damit! :)

EDIT: Gibt es irgendwo eine quelle, wo alle fehler, die auftreten könnten, aufgelistet sind? Danke

EDIT: Falls mein vorhaben funktioniert, könnte ich eigentlich die "Err.Number" funktion aus VB nachbauen!
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Bau dir deine eigenen Exceptions, dann hast wesentlihc weniger Aufwand. Wenn du jetzt _JEDE_ Fehlernummer abfangen willst, dann wünsch ich dir schon mal jetzt viel Spaß beim wochenlangen programmieren.
 

kahuna

Erfahrenes Mitglied
OK, nur was kleines am Rande:

Du solltest in jedem Fall vermeiden Exceptions per throw weiter zu werfen. Exceptions kosten nur solange keine Performance, bis man sie wirft. Dabei wird ein Stack walk durchgeführt und dieser kostet dich Performance en masse.

Versuch also throw soweit wie möglich zu vermeiden.

Gruss Alexander
 

Christian Kusmanow

Erfahrenes Mitglied
Nobert meinte das sichlich Ironisch und hat auch das wiederholt was ich anfangs vorgeschlagen hab.
Bau Dir doch eigene Exception-Klassen die Du von Exception ableitest
und mit den Parametern versiehst, die für die Ausnahmebehandlung notwendig sind.
Desweiteren würde ich Dir intern extra noch ErrorCodes empfehlen.
Diese könntest Du verwenden, um die entspechenden Fehlermeldungen in der
gewünschten Sprache auszugeben die Du in deinen Ressources hinterlegt hast.
Hier ein [thread=185005]Thread[/thread] zu Thema.
 

SeeSharpNewBee

Erfahrenes Mitglied
Ich hab das jetzt so gelöst! (siehe code)

Code:
namespace MyErrorHandl
{
	public class MyErrorExceptions
	{
		public int ErrNumber(Exception ex)
		{
			if(ex is UnauthorizedAccessException) return 1;
                        //Hier ergänzungen hinzufügen, sollten die 99 nicht reichen kann man das ändern
			return 99;
		}
	}
}
 

Christian Kusmanow

Erfahrenes Mitglied
Ok, sieht schon gut aus.
Aber es treten doch bestimmt nicht immer UnauthorizedAccessExceptions an der gleichen stelle auf.

// Edit: Beispiel war Falsch, steht jetzt im [post=1109424]16. Post[/post].

MfG, cosmo
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
OMG.
Gewöhn dir einfach an mit Exceptions zu arbeiten und vergiss es einfach, da schmutzige Dinge aus der alten Welt nachzubauen. Das hat doch mit OOP nix zu tun. *graus*
 

Christian Kusmanow

Erfahrenes Mitglied
Mist hab mich verzettelt. Das anwendunsbeispiel sollte so aussehen:
Code:
try{
	throw new UnauthorizedAccessException();
}catch ( Exception ex ) {
	MessageBox.Show( new MyErrorExceptions( 24, "C# Exception Test", ex ).ToString() );
}
Wen das jetzt nicht OOP ist, hab ich das Thema überhaupt gar nicht verstanden.
 

Norbert Eder

Erfahrenes Mitglied
Nein, würd ich so auch nicht machen.

Schau, eigene Exceptions zahlen sich nur aus, wenn man Exceptions in eigene Klassen einbaut. In einem catch eine neue Exception zu instanzieren bringt Overhead wo keiner sein müsste.
 

Christian Kusmanow

Erfahrenes Mitglied
Achso.

Der OOP wegen erbt die Klasse von Exception, damit man einfach auf die Eigenschaften zugreifen kann.
Bringt hier aber nichts weil wir den Typ als Basis nie brauchen, sondern nur Information darüber haben wollen.
Es währe es jetzt also besser ein Member vom Typ Exception zu verwenden.
Code:
namespace MyErrorHandl
{
	public class MyErrorExceptions
	{
		private Exception _Exception;
		private int _ProcedureCode = 0; // Der Code der dem Vorgang im Programm zugeordnet ist.

		public MyErrorExceptions( int ProcedureCode, Exception exception ) {
			_Exception = exception;
			_ProcedureCode = ProcedureCode;
		}
		public int ErrorCode {
			get {
				if( _Exception is UnauthorizedAccessException )
					return 1;
				//Hier ergänzungen hinzufügen, sollten die 99 nicht reichen kann man das ändern
				return 99;
			}
		}
		public string Message {
			get {
				return _Exception.Message;
			}
		}
		public override string ToString() {
			return string.Format( "Es wurde folgende Ausnahme ausgelöst: {0}\nErrorCode: {1}\nAusgelöst von Vorgang: {2}", _Exception.Message, this.ErrorCode, this._ProcedureCode );
		}
	}
}
Code:
try{
	throw new UnauthorizedAccessException();
}catch ( Exception ex ) {
	MessageBox.Show( new MyErrorExceptions( 24, ex ).ToString() );
}
 

SeeSharpNewBee

Erfahrenes Mitglied
@ Norbert Eder: Hättest du einen besseren vorschlag wie ich mein problem lösen könnte? Weil ich finde die hilfestellung ganz interessant und nützlich!
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Warum empfindest du es als Problem wenn die Exception keine Nummern haben? Durch den Typ der Exception weisst du ja auch schon über die Art des Fehlers bescheid.
Wenn du eine eigene Fehlermeldung ausgeben willst kannst ja diese auch anhand des Typs bestimmen. Und der Text in der Message Eigenschaft ist auch nicht wirklich (immer) "kryptisch".

MfG,
Alex
 

SeeSharpNewBee

Erfahrenes Mitglied
Naja, aber was wäre dir lieber? Wenn du "Zugriffsverletzung aufgrund einer ungültigen freigabe..." stehen hast, oder wenn eine meldung kommt, "Sie können nicht auf das Netzlaufwerk zugreifen, weil sie dazu nicht berechtigt sind!"? Und dann frag noch jemand der eigentlich nur enduser ist, und damit zurechtkommen muss! :)
 

Neue Beiträge