public static void Run() { var s = new StructWithYieldReturn { val = 2 }; var count = s.Count(); YieldReturnTest.Print("StructWithYieldReturn", count.GetEnumerator()); YieldReturnTest.Print("StructWithYieldReturn (again)", count.GetEnumerator()); }
static void Main() { Print("SimpleYieldReturn", SimpleYieldReturn().GetEnumerator()); Print("SimpleYieldReturnEnumerator", SimpleYieldReturnEnumerator()); Print("YieldReturnParameters", new YieldReturnTest { fieldOnThis = 1 }.YieldReturnParameters(2).GetEnumerator()); Print("YieldReturnParametersEnumerator", new YieldReturnTest { fieldOnThis = 1 }.YieldReturnParametersEnumerator(2)); Print("YieldReturnInLoop", YieldReturnInLoop().GetEnumerator()); Print("YieldReturnWithTryFinally", YieldReturnWithTryFinally().GetEnumerator()); Print("YieldReturnInLock1", YieldReturnInLock1(new object()).GetEnumerator()); Print("YieldReturnInLock2", YieldReturnInLock2(new object()).GetEnumerator()); Print("YieldReturnWithNestedTryFinally(false)", YieldReturnWithNestedTryFinally(false).GetEnumerator()); Print("YieldReturnWithNestedTryFinally(true)", YieldReturnWithNestedTryFinally(true).GetEnumerator()); Print("YieldReturnWithTwoNonNestedFinallyBlocks", YieldReturnWithTwoNonNestedFinallyBlocks(SimpleYieldReturn()).GetEnumerator()); // TODO: check anon methods Print("GetEvenNumbers", GetEvenNumbers(3).GetEnumerator()); Print("YieldChars", YieldChars.GetEnumerator()); Print("ExceptionHandling", ExceptionHandling().GetEnumerator()); Print("YieldBreakInCatch", YieldBreakInCatch().GetEnumerator()); Print("YieldBreakInCatchInTryFinally", YieldBreakInCatchInTryFinally().GetEnumerator()); Print("YieldBreakInTryCatchInTryFinally", YieldBreakInTryCatchInTryFinally().GetEnumerator()); Print("YieldBreakInTryFinallyInTryFinally(false)", YieldBreakInTryFinallyInTryFinally(false).GetEnumerator()); Print("YieldBreakInTryFinallyInTryFinally(true)", YieldBreakInTryFinallyInTryFinally(true).GetEnumerator()); try { Print("UnconditionalThrowInTryFinally()", UnconditionalThrowInTryFinally().GetEnumerator()); } catch (Exception ex) { Console.WriteLine(ex.Message); } Print("NestedTryFinallyStartingOnSamePosition", NestedTryFinallyStartingOnSamePosition().GetEnumerator()); Print("TryFinallyWithTwoExitPoints(false)", TryFinallyWithTwoExitPoints(false).GetEnumerator()); Print("TryFinallyWithTwoExitPoints(true)", TryFinallyWithTwoExitPoints(true).GetEnumerator()); #if !LEGACY_CSC Print("YieldBreakInNestedTryFinally()", YieldBreakInNestedTryFinally().GetEnumerator()); Print("TryFinallyWithTwoExitPointsInNestedTry(false)", TryFinallyWithTwoExitPointsInNestedTry(false).GetEnumerator()); Print("TryFinallyWithTwoExitPointsInNestedTry(true)", TryFinallyWithTwoExitPointsInNestedTry(true).GetEnumerator()); Print("TryFinallyWithTwoExitPointsInNestedCatch(false)", TryFinallyWithTwoExitPointsInNestedCatch(false).GetEnumerator()); Print("TryFinallyWithTwoExitPointsInNestedCatch(true)", TryFinallyWithTwoExitPointsInNestedCatch(true).GetEnumerator()); #endif Print("GenericYield<int>()", GenericYield <int>().GetEnumerator()); StructWithYieldReturn.Run(); }