Wann wird InvalidOperationException oder NotSupportedException verwendet?
Ich bin Implementierung einer custom collection-Implementierung, die entweder lese-oder non-readonly; das heißt, alle Methoden, die sich der Sammlung eine Funktion aufzurufen, ist das moralische äquivalent zu:
private void ThrowIfReadOnly() {
if (this.isReadOnly)
throw new SomeException("Cannot modify a readonly collection.");
}
Ich bin nicht sicher, welche der NotSupportedException
oder InvalidOperationException
sollte ich verwenden, in diesem Fall.
InformationsquelleAutor der Frage Jean Hominal | 2012-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die MSDN hat nur ein bisschen Anleitung zu diesem präzisen Thema, auf
NotSupportedException
:Was folgt ist rein meine eigene interpretation der Regel:
InvalidOperationException
sollte verwendet werden.NotSupportedException
sollte verwendet werden.Dispose()
nennen, das macht oft die meisten anderen Instanz-Methoden unbrauchbar;ObjectDisposedException
- Typ sollte verwendet werden. (Das ist immer noch ein Subtyp vonInvalidOperationException
).Die praktische Anwendung dieser Regeln in diesem Fall wäre wie folgt:
isReadOnly
kann nur eingestellt werden, zu der Zeit, wenn das Objekt erstellt wird (z.B. ein Konstruktor-argument), und niemals, zu keiner anderen Zeit, dannNotSupportedException
sollte verwendet werden.isReadOnly
ändern können während der Lebensdauer des Objekts, dannInvalidOperationException
verwendet werden soll.InvalidOperationException
vsNotSupportedException
ist eigentlich irrelevant in dem Fall der Implementierung einer collection - angesichts der Beschreibung desIsReadOnly
auf der MSDN-Website, die nur erlaubt Verhalten fürIsReadOnly
ist, dass Ihr Wert ändert sich nie nach der Sammlung wird initialisiert. Das bedeutet, dass eine collection-Instanz kann entweder änderbar oder schreibgeschützt sind, aber es sollte wählen Sie eine bei der Initialisierung und halten mit ihm für den rest seines Lebens.InformationsquelleAutor der Antwort Jean Hominal