Ich habe ein Stück Code mit der folgenden Logik:
//pseudo-code
foreach (element in elementList) {
if (element is whatever)
return element;
}
}
Theoretisch gibt es immer ein Element, das was auch immer ist, so dass diese Methode keine Probleme aufwerfen sollte. Auf jeden Fall habe ich eine Behauptung an das Ende der Methode gesetzt, nur um sicherzugehen:
//pseudo-code
foreach (element in elementList) {
if (element is whatever)
return element;
}
}
Contract.Assert(false, "Invalid state!");
Das Problem ist, dass diese Methode etwas zurückgeben muss und der Compiler nicht versteht, dass die Behauptung die Programmausführung unterbrechen wird. Bevor ich Contracts verwendet habe, habe ich in solchen Situationen eine Exception geworfen, was das Problem gelöst hat. Wie würden Sie dies mit Contract.Assert() handhaben? Null oder default(element_type) nach dem Contract.Assert()-Aufruf zurückgeben, in dem Wissen, dass es nie aufgerufen wird, und den Compiler zum Schweigen bringen? Oder gibt es eine andere, elegantere Möglichkeit, dies zu tun?
Danke