Warum hat C# nicht lassen Sie mich rufen Sie eine void-Methode, die als Teil der return-Anweisung?

Ich bin neugierig, ob es eine legitime Grund, warum C# keine Unterstützung für den Aufruf einer void-Methode als Teil der return-Anweisung, wenn die aufrufende Methode zurück geben ist ebenfalls ungültig.

public void MethodA() 
{ 
    return; 
}

public void MethodB() 
{
    return MethodA();
}

So würden wir normalerweise sehen:

public void MethodMeh() 
{
    if (expression) 
    {
        MethodA();
        return;
    }

    //Do more stuff
}

... wenn wir könnten mit diesem statt:

public void MethodAwesome() 
{
    if (expression) 
        return MethodA();

    //Do more stuff
}

Ist dies eine Sprache, die Beschränkung durch wie C# Griffe leere?

  • Ich bin sicher, es ist in der Sprache spec. Es wäre sehr irreführend, lassen Sie den return-Schlüsselwort in einem Kontext, in dem kein Wert zurückgegeben wird.
  • es ist wie zu sagen - "in dieser Methode, die keinen Wert zurückgibt,können wieder in dieser Methode(die auch nicht zurück)...und so weiter,und..."
  • Keines der oben genannten Beispiele gibt eine Methode!
  • möglicherweise compiler sucht immer ein ";", gefolgt von return keyword bei void zurück geben, sonst nichts !!! (Eine Vermutung. Ich bin ein java-dev)
  • Es gibt nichts, inhärente würde, dass diese unmöglich. Zum Beispiel F# hat die Unit geben. Die CLR hat diese ganz spezielle void construct (geerbt von C). Mir scheint es das C-Sprachen sind die ungeraden hier.
  • Warum würden Sie wollen, zu tun MethodAwesome? Kürzerer code ist nicht besser, code, übersichtlicher code ist besser code. Es sieht aus wie es gibt eine Methode, wenn es nicht sein würde, ist unnessarily verwirrend.
  • +1. Tatsächlich, diese Frage könnte erweitert werden zu "warum ist es nicht legal schreiben return void; in einer Methode, die Rückgabe eine leere?". Und dann, durch Erweiterung, return f() wenn f's return-type void. Das problem sehe ich - das kann wirklich bedeuten, die Antwort auf die Frage - ist, dass es kann dazu führen, auf die Frage "warum ist es nicht legal zum schreiben einer Variablen-Deklaration, wie void x = f()?".
  • Es gibt ein weiteres Manko mit einer Umsetzung der vorgeschlagenen syntax. Sie sind mit return mit einer Methode, die zurückgibt void, in einem Kontext, der einen Wert erwartet. Also es wäre nur anwendbar, in der Umstand, wo man in einer void Methode und aufrufen von anderen void Methode. Andernfalls würde es zu einem compiler-Fehler. Später dann, wenn man entweder wurde verändert, um nicht void syntax brechen würde - während der üblichen syntax wäre weiter gut arbeiten.
  • Ich glaube ich habe die einzige Antwort, die tatsächlich zeigt, dass der Titel fragt.
  • Recht. Wenn Sie einen Vorschlag für einen besseren Titel, Bearbeiten entfernt. "Warum C# keine Unterstützung für die Rückgabe der nicht vorhandene Ergebnis einer Methode, die eine void-Rückgabe-Typ"?
  • Ich denke, das wäre ein besserer Titel.
  • Lemme wissen, ob, die Frage ist besser; ich versuchte, nicht in die details der 'leere Raum ist nicht ein echter Typ", denn das ist im wesentlichen die Beantwortung Ihrer eigenen Frage 🙂
  • wie ist das anders aus, eine Methode, die zurückgibt, ein echter Typ ruft eine andere Methode gibt, die den gleichen Typ?
  • Denn es wäre verwirrend, wenn jemand Lesen Sie den code, und es würde sparen Sie nur ein paar Tastenanschläge sowieso. Kürzer ist nicht immer besser.
  • Implizite casts. Wenn ich eine Methode, die zurückgibt IEnumerable<T>, die nennt man die zurück IEnumerable<T>, und ich später ändern, das innere zu List<T>, ich brauche nicht, etwas zu tun. Wenn ich es ändern zu Dictionary<T, V> würde, dann würde ich es ändern müssen, aber das wäre zu erwarten, weil alles, was war, ruft diese Methode auf, um eine IEnumerable<T> jetzt bekommt neue Daten. Aber die Veränderung von void zu anderen return-Typ sollte nicht brechen nichts, weil es nichts nutzt eine void.
  • C# erlaubt mir, mich zu nennen, die einen Wert zurückgibt-Methode und ignorieren die Rückkehr geben; wenn diese dumme "void " zurückgeben" syntax legal waren, wäre es leicht genug, um einfach zu verwerfen, die neu-gültig Rückgabetyp der inneren Methode, wenn die äußere Methode war nichtig.
  • Es ist wahr, aber dann verlieren Sie die compiler-Fehlermeldung, wenn Sie return true; am Ende Ihrer void Methode. Aufrufen einer Methode und ignoriert die Rückkehr ist einfach eine Nachricht, nicht einmal eine Warnung, wenn ich mich Recht erinnere.
  • Weil in C# return void; ist auch ungültig.

InformationsquelleAutor Matt Beckman | 2014-07-10
Schreibe einen Kommentar