ShuffleBag (Fisher-Yates + PcgRandom)
Enumerate once

I'm not sure whether you intended to write this to be iterable only once. Is this as designed?

[TestMethod]
public void CodeReview()
{
    var bag = new ShuffleBag&lt;string&gt;(new[] { "a", "b", "c", "d" });

    var e1 = bag.ToList();  // randomized: "b", "a", "c", "d"
    var e2 = bag.ToList();  // last element: "d"
    var e3 = bag.ToList();  // last element: "d"
}


Collections interfaces

I would let the bag inherit IReadOnlyCollection&lt;T&gt; to provide eager access to the bag's size:

public int Count =&gt; m_values.Length;