Ich habe Code in unserem Projekt geerbt, der so aussieht. Es ist eine Methode in einer Klasse.Exception im try-Block werfen statt catch-Block?
protected override bool Load()
{
DataAccess.SomeEntity record;
try
{
record = _repository.Get(t => t.ID.Equals(ID));
if (record == null)
{
throw new InvalidOperationException("failed to initialize the object.");
}
else
{
this.ID = record.ID;
// this.OtherProperty = record.SomeProperty;
// etc
}
}
catch (Exception)
{
throw;
}
return true;
}
Wenn ich dann diese Load-Methode aus meiner UI-Ebene nennen, würde ich wahrscheinlich versuchen catch-Block haben will jede Ausnahme verursacht durch den Ausfall zu fangen die Instanz zu laden, beispielsweise InvalidOperationException, aber der obige Code fühlt sich falsch an.
Wird die InvalidOperationException nicht von der Catch-Anweisung verschluckt? Diese catch-Anweisung wird auch potenzielle Probleme mit _repository.Get sowie mögliche Probleme mit der Einstellung von Eigenschaften, wenn der Datensatz gültig ist, abfangen.
Ich dachte, ich sollte es vielleicht restrukturieren, indem ich mehr try catch-Anweisungen hinzufügen, um die Get-Operation und Eigenschafteneinstellung separat zu behandeln, oder weitere catch-Blöcke mit verschiedenen Ausnahmen hinzufügen, aber ich fragte einen Kollegen, und er schlug vor, dass der Versuch zu fangen ist in diesem Fall irrelevant und sollte vollständig entfernt werden, es mögen verlassen:
protected override bool Load()
{
DataAccess.SomeEntity record;
record = _repository.Get(t => t.ID.Equals(ID));
if (record == null)
{
throw new InvalidOperationException("failed to initialize the object.");
}
else
{
this.ID = record.ID;
// this.OtherProperty = record.SomeProperty;
// etc
}
return true;
}
ich möchte einige zweite Meinung, habe ich ein Interesse an der Ausnahmebehandlung nehmen, so möchte ich gerade erst begonnen stellen Sie sicher, dass ich es gemäß den Best Practices richtig mache.
Ihr Kollege hatte Recht. Beide Versionen machen das gleiche, also warum nicht weniger Code haben? –
Ich würde vorschlagen, dass * throw * dort von Debugging übrig geblieben ist - mit diesem Stück Code können Sie einen Haltepunkt auf den * throw * setzen, und dann die Ausnahme untersuchen (mit $ Ausnahme $ im unmittelbaren Fenster). Dies ist nützlich, wenn Sie noch nicht genau wissen, was genau dort herauskommen könnte, und wie die anderen Plakate gesagt haben, hat es ansonsten keine Wirkung. – slugster