Wie der Name schon sagt, ist ein ArgumentException
eine Ausnahme für ein Argument. Es bedeutet, dass das Argument irgendwie von Natur aus falsch war.
Die allgemeine Form ist:
%Vor% Wenn der only mögliche Weg, dass GetUserById
fehlschlagen könnte, war, dass etwas inhärent falsch mit dem Wert von idOfUser
war, dann wäre das Folgende dasselbe in der Praxis:
Und wenn es aus irgendeinem Grund schneller oder weniger verschwenderisch ist, eine Ressource nach user
zu testen als idOfUser
vor und if Es gab keine Nebenwirkungen von GetUserById
, und Wenn der Unterschied tatsächlich eine Rolle spielte, dann vielleicht wäre die zweite Version eine vernünftige Optimierung des ersten.
Aber das gilt nur, wenn alle obigen if gelten, und es ist dann eine seltsame Art, ein ungültiges Argument zu erkennen, das einen bestimmten Vorteil hat, wenn wir von der Verkapselung von Methoden profitieren, indem wir diese ausblenden Seltsamkeit von allem anderen.
Wahrscheinlich gibt es ein gültiges idOfUser
, für das es kein entsprechendes user
gab. In diesem Fall war es sicherlich keine Ausnahme für das Argument.
Der erste
%Vor%sollte
sein %Vor% Wenn möglich, sollten Sie ArgumentException
nicht direkt ausgeben
Die primären abgeleiteten Klassen von
ArgumentException
sindArgumentNullException
undArgumentOutOfRangeException
. Diese abgeleiteten Klassen sollten anstelle vonArgumentException
verwendet werden, außer in Situationen, in denen keine der abgeleiteten Klassen akzeptabel ist.
Für das zweite Beispiel hier Soll ich eine KeyNotFoundException für eine Datenbanksuche auslösen? schlagen sie (in Kommentaren) Sie ist in System.Data
definiert: System.Data.ObjectNotFoundException
.