Ich habe eine Klasse wie:Wie alle Ausnahmen auf Klassenebene in CSharp zu fangen?
class SampleRepositoryClass
{
void MethodA()
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}
void MethodB(int a, int b)
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}
List<int> MethodC(int userId)
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}
}
In obigem Beispiel können Sie, dass in der einzelnen Methoden (siehe MethodA, MethodB, MethodC) haben versuchen ... catch-Blöcke, die Fehler zu protokollieren und dann zu einem höheren Ebene werfen .
Stellen Sie sich vor, wenn meine Repository-Klasse mehr als hundert Methoden haben und in jeder Methode habe ich versuchen ... catch Block, auch wenn es nur einzelne Zeile des Codes.
Jetzt ist meine Absicht, diese repetitive Ausnahme Logging-Code zu reduzieren und alle Ausnahmen auf Klassenebene statt auf Methodenebene zu protokollieren.
Nur [aspektorientierte Programmierung] (http://en.wikipedia.org/wiki/Aspekt-orientierte_Programmierung) Werkzeuge/Weber [wie PostSharp] (http://www.postsharp.net/) könnten Ihnen helfen. Übrigens, mehr als hundert Methoden in einer Klasse? Das ist nur ... * Schlecht *. Zumindest aus meiner Sicht. Und auf jeden Fall unheimlich. –
Das stimmt, aber meine Business- und Repository-Klassen haben viele Methoden, die diese Klassen zu schwer machen. Tatsächlich hängt die Anzahl der Methoden in einer Klasse von der Komplexität der Geschäftsregeln oder der Anzahl der Operationen ab, die Sie ausführen möchten. – Haidar
Verwenden Sie nicht "werfen ex;" denn das wird deinen wertvollen Call-Stack zerstören. Schreib einfach "werfen". und die Informationen in der Ausnahme bleiben erhalten. Damit möchte ich darauf hinweisen, dass Sie keine Ausnahmen abfangen sollten, wenn Sie nicht wissen, wie Sie damit umgehen sollen. Referenz: http://stackoverflow.com/questions/730250/is-there-a-difference-between-throw-and-throw-ex –