Was ist richtiger? Wie Kirks Kommentar nahelegt: Es kommt darauf an. Manchmal macht ein null
logischen Sinn und manchmal ist eine Ausnahme besser geeignet, wenn kein Standard vernünftig ist. Eine Sache, die ich versuche zu tun, ist zu denken "ruft GetCurrentItem
einen logischen Fehler oder eine sichere Sache?"
Wenn es ein Fehler ist, GetCurrentItem
aufzurufen, wenn keine vorhanden sind, dann ist das Auslösen einer Ausnahme der richtige Kurs. Wenn Ihre Sammlung z. B. eine HasCurrent
oder IsEmpty
Eigenschaft aufweist, bei der jemand das Ergebnis vor dem Aufruf von GetCurrentItem
überprüfen könnte, dann sollten sie "es besser wissen". Aber wenn der aktuelle Artikel null
ist eine korrekte logische Art der Verwendung Ihrer Klasse, dann auf alle Fälle Design es so. In jedem Fall dokumentiere ich das Verhalten in den Code-Kommentaren, um die Benutzer über das erwartete Verhalten zu informieren.
Ich werde dies jedoch sagen, die ArgumentOutOfRange
Ausnahmebesonderung möglicherweise bluten Implementierungsdetails. Das heißt, wenn der Benutzer dieser Klasse keine Ahnung hat, dass die innere Struktur ein Array oder List<T>
ist, blenden Sie diese Ausnahme nicht aus, sondern fangen Sie sie ein, wickeln Sie sie um und werfen Sie eine aussagekräftigere (benutzerdefinierte oder ähnliche) InvalidOperationException
).
Da sie nicht wirklich direkt in einem Argument übergeben, bekommen sie eine ArgumentOutOfRange
Ausnahme verwirrend :-) könnte
Welche die richtige API ist: 'Enumerable.Single' oder' Enumerable.SingleOrDefault'? (Antwort: es kommt darauf an) –