Skip to content

Hashset Remove is not throwing on enumeration #8177

Open
@wrexbe

Description

@wrexbe

Description

I found some code that was looping over a hashset, and removing items. Hashset is not throwing when you remove while enumerating like it used to.
It's convenient that it's like this, but it's different then how it used to work, and I'm not sure if it's safe.

The documentation says it should throw, so either the documentation needs to be updated, or the Hashset needs to be fixed.
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.hashset-1.getenumerator?view=net-6.0

Reproduction Steps

HashSet<int> set = new();
set.Add(1);
set.Add(2);

foreach (var x in set)
{
    set.Remove(x);
}

Expected behavior

Throws an invalid operation exception

Actual behavior

It works

Regression?

.Net 3.1 throws

Known Workarounds

Don't do it?

Configuration

No response

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions