>>649
どうでもいいけどLinq版のコードひどいぞ
何回列挙走らせてるんだよ

var buff = self.ToArray();
var order = Enumerable.Range(0, buff.Length).ToArray();

return buff
.Zip(order, (x, y) => new { Key = x, Value = y })
.OrderByDescending(x => x.Key)
.ThenBy(x => random.Next())
.Select(x => x.Value);