Ok, das könnte ein bisschen gehackt sein, aber haltet durch :) Der Hintergrund ist, dass ich es leid bin, Methoden zu sehen, die einen if-Statement enthalten, das die Einrückung für die gesamte Methode durcheinanderbringt, wie zum Beispiel:
public SomeClass DoStuff(string inputStr)
{
SomeClass result =null;
if (IsOpenFilter(inputStr))
{
....
}
return result;
}
Also dachte ich mir, wäre es nicht toll, stattdessen so etwas zu tun:
public SomeClass DoStuff(string inputStr)
{
Require(IsOpenFilter(inputStr),null);
....
return result;
}
Dieser Fall könnte in irgendeiner Form von Code Contracts abgedeckt sein, wenn ja, bitte korrigiere mich :)
Die Idee ist, dass, wenn die Aussage nicht wahr ist, null zurückgegeben wird. Wenn es keinen Rückgabetyp für die Methode gäbe, würde es einfach sein: Require(IsOpenFilter(inputStr));
Also, ich denke, es gibt zwei Fragen, kann das irgendwie gemacht werden? Ich bin ratlos, wie man einen bedingten Rückgabewert von dem Aufruf einer Methode aus machen kann.
Die andere Frage ist, ob das eine gute Idee ist? Es ist etwas seltsam, die Sprache auf diese Weise zu "monkeypatchen", aber mir gefällt die Art und Weise, wie der Code aussieht. Es wäre noch sauberer, wenn es in Form eines Attributs über der Methode stehen könnte: [Require(IsOpenFilter(inputStr))]
5 Stimmen
Warum setzen Sie nicht einfach
if (!IsOpenFilter(inputStr)) return null;
am Anfang Ihrer Funktion?0 Stimmen
Zustimmen! Das ist, was ich tun würde. Weil ich es hasse, ein If-Indent im Code-Block mitzunehmen.
2 Stimmen
Es steht im Konflikt mit meinen bevorzugten Formatierungsregeln in Visual Studio und fügt einen Zeilenumbruch hinzu, außerdem ist es meiner Meinung nach nicht so elegant :)
0 Stimmen
Dies kann mit #define in C oder C++ gemacht werden, und ich bin mir ziemlich sicher, dass die meisten Leute heute denken, dass Kontrollstrukturen innerhalb von Makros keine gute Idee sind.