Fehler 'Iterator kann keine Rückgabeanweisung enthalten', wenn eine Methode aufgerufen wird, die eine Rendite zurückgibt

8

Ich hoffe, es gibt einen schöneren Weg, diese Methode zu schreiben & amp; Überladungen mit weniger Codeverdopplung. Ich möchte eine Sequenz von Deltas zwischen Elementen in einer Liste zurückgeben. Diese Methode: -

%Vor%

funktioniert gut.

Ich dachte dann über eine Überladung nach, die ein absolutes Delta erlauben würde, würde aber die ursprüngliche Methode aufrufen, wenn absolute nicht erforderlich wäre: -

%Vor%

aber das kompiliert wegen Fehler

nicht
  

"Kann keinen Wert von einem Iterator zurückgeben. Verwenden Sie die Rendite-Rückgabe   Anweisung, um einen Wert zurückzugeben, oder Bruch, um die Iteration zu beenden. "

Ich habe mir dieser Beitrag und es scheint, als ob ich nichts anderes tun kann, als den Code von der ursprünglichen Methode zu wiederholen: -

%Vor%

Kann jemand einen besseren Weg vorschlagen, dies zu tun?

    
Dave00Galloway 30.04.2014, 14:40
quelle

2 Antworten

11

Eine einzelne Methode kann nicht sowohl yield return als auch return . Sie müssen das eine oder das andere wählen.

Sie können entweder foreach bis yield return der Liste ausführen:

%Vor%

Oder trennen Sie Ihren Code in zwei Methoden:

%Vor%     
Tim S. 30.04.2014, 14:46
quelle
4

Der einfachste Ansatz besteht wahrscheinlich darin, die Methode in zwei aufzuteilen, von denen eine über einen Iterator-Block implementiert wird und einer nicht:

%Vor%

Dieser Split-Ansatz ermöglicht es Ihnen auch, sequence , z. B.

, zu validieren %Vor%

... in der Nicht-Iterator-Block-Methode.

    
Jon Skeet 30.04.2014 14:43
quelle