Skip to content

dict has invalid enumerator on dotnet core #5910

@KevinRansom

Description

@KevinRansom

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions