Note: the standard versions of this algorithm might use "i+r.Next(list.Count-i)" instead of "r.Next(list.Count)", so that the swap target is chosen only from not-yet-shuffled items. I am not sure if doing so improves the randomness of the result, however.