public void Test(string value, int index)
{
if(value.lenght == 0)
throw new ArgumentException("value is NULL");
try
{
// Code ...
}
catch(Spezifische Exception e)
{
log.info("Fehler in");
throw e;
}
}
if(object != null) { ... } lieber if(object == null) throw new Exception("...") werfen?|
|
| 2 |
Schau doch mal mal hier: [url=http://codekicker.de/fragen/Exceptions-weitergeben-oder-sofort-behandeln/471]Exceptions weitergeben oder sofort behandeln?[/url]
– BeachBlocker 14.07.2010
|
throw e
throw
|
|
2) Sollte man anstatt
if(object != null) { ... }
lieber
if(object == null) throw new Exception("...")
werfen?
if(object == null)
throw new ArgumentNullReferenzException("Der Parameter 'object' darf nicht 'null' sein.")
public void LoadSettingsInContext(User currentUser){
try{
Context.Load(Path.Combine(App.CurrentPath,currentUser.Name + ".settings"))
}
catch (FileNotFoundException ex){
Content.CreateSettingsFileWithDefaultValues(Path.Combine(App.CurrentPath,currentUser.Name + ".settings"))
}
}//Wann, Was, Wo - Text
2009-07-20 15:34:03 [ERROR] [DatenImport.JobClass] - Fehler im Importer
//Die Fehlermeldung .. in diesem Fall "SqlException" und der Fehlertext
System.Data.SqlClient.SqlException: Bei der Konvertierung eines char-Datentyps in einen datetime-Datentyp liegt der datetime-Wert außerhalb des gültigen Bereichs.
Die Anweisung wurde beendet.
//Interne Klassen vom .Net-Framework .. machmal sehr hilfreich bei der Suche nach dem Fehler
// Aber ah: hier ist der Fehler, also die Exception, ausgelößt worden.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
//Oh .. hier wirds interessant:
//Der Fehler ist in der Funktion "InternalImport" in der Class "XXXImporter" im Namespace "Mail.DatenImport.Importer" in der Zeile 130 zwar nicht aufgetreten, aber das ist mein Quellcode, ich hätte hier das erste mal die Möglichkeit gehabt den Fehler zu behandeln.
at Mail.DatenImport.Importer.XXXImporter.InternalImport(Stream stream) in D:\ProjectX\Importer\XXXImporter.cs:line 130
at Mail.DatenImport.Importer.XXXImporter.Import(Stream stream) in D:\ProjectX\Importer\XXXImporter.cs:line 22
at Mail.DatenImport.JobClass.Parse_AttachmentList(Pop3Message Message, Guid interne_MessageID, List`1 FileExtensionList, IImporter Importer) in D:\ProjectX\JobClass.cs:line 140
//Schluss.. Denn an dieser stelle habe ich den Fehler behandelt, ins Log geschrieben, mir als Programmierer eine E-Mail geschickt und mit dem nächsten Schleifendurchlauf weiter gemacht.
|
|
|
|
public void Test(string value, CustomObject cObject)
{
if(value.lenght == 0)
throw new ArgumentException("value is NULL");
if(cObject == null)
throw new ArgumentNullException("cObject is NULL");
// Code ...
}
|
|
| 1 |
Kurz eine Anmerkung vorweg. Eigendlich ist das eine neue Frage. Antworten, Danksagugen und Zusatzfragen zu einer Antwort werden als Kommentar abgegeben. Das ist kein Forum ;)
Im Prinzip reicht es, die Parameter vor der ersten Verwendung zu prüfen. Dh. wenn du in eine Funktion kommst die die Parameter nicht bloß an eine weiter Funktion weiterreicht sondern mit den Parametern rechnen will oder auf Eigenschaften zugreifen will. – Floyd 14.07.2010
|
|
| 1 |
Noch ne Anmerkung: Du solltest immer die Antwort akzeptieren die dich am meisten weiter gebracht bzw. die dein Problem oder deine Frage gelößt hat. Alle anderen Antworten kannst du noch zusätzlich positiv bewerten. Codekicker wird dann die Akzeptierte Antwort direkt unter deiner Frage darstellen und dann nach Anzahl Punkte sortieren damit, wenn jemand die selbe Frage hat, er sofort alles wichtige sieht.
– Floyd 14.07.2010
|
|
|
Sorry bin noch nicht so vertraut mit dem System. Wollte eigentlich die Antwort von Dir (Floyd) mit dem grünen Hacken versehen. Kann man das nachträglich ändern?
– kruemel 14.07.2010
|
||
|
Ja kannst du nachträglich ändern. Du klick bei gfoidl nochmal auf den Grünen hacken drauf um ihn "rauszunehmen" und dann kannst du dich umentscheiden.
falls du es machen solltest, vergiss bitte nicht "gfoidl" eine positive bewertung zu geben. – Floyd 14.07.2010
|