-
Notifications
You must be signed in to change notification settings - Fork 844
Closed
Description
This code behaves differently on NetCore and NetFramework
What happens is when MoveNext has moved past the end of the collection it's Enumerator needs to throw invalid operation exception on Current, instead it grabs the last value
// Learn more about F# at http://fsharp.org
open System
open System.Collections.Generic
[<EntryPoint>]
let main argv =
let ie = (dict [|(1,1);(2,4);(3,9)|]) :> IEnumerable<KeyValuePair<_,_>>
let enum = ie.GetEnumerator()
let step2 = enum.MoveNext()
let step3 = enum.Current
printfn "%b %A" step2 step3 |> ignore
let step4 = enum.MoveNext()
let step5 = enum.Current
printfn "%b %A" step4 step5 |> ignore
let step6 = enum.MoveNext()
let step7 = enum.Current
printfn "%b %A" step6 step7 |> ignore
let step8 = enum.MoveNext()
let step9 = enum.Current
printfn "%b %A" step8 step9 |> ignore
let step10 = enum.MoveNext()
let step11 = enum.Current
printfn "%b %A" step10 step11 |> ignore
0 // return an integer exit code
Output on NetCore:
C:\Users\kevinr\source\repos\ConsoleApp22\ConsoleApp22\bin\Debug>dotnet C:\Users\kevinr\source\repos\ConsoleApp22\ConsoleApp22\bin\Debug\netcoreapp2.1\ConsoleApp22.dll
true [1, 1]
true [2, 4]
true [3, 9]
false [3, 9]
false [3, 9]
Output on NetFramework
C:\Users\kevinr\source\repos\ConsoleApp22\ConsoleApp22\bin\Debug>C:\Users\kevinr\source\repos\ConsoleApp22\ConsoleApp22\bin\Debug\net472\ConsoleApp22.exe
true [1, 1]
true [2, 4]
true [3, 9]
Unhandled Exception: System.InvalidOperationException: Enumeration already finished.
at System.SZArrayHelper.SZGenericArrayEnumerator`1.get_Current()
at Program.main(String[] argv) in C:\Users\kevinr\source\repos\ConsoleApp22\ConsoleApp22\Program.fs:line 25
Metadata
Metadata
Assignees
Labels
No labels