コレクションをシャッフルする方法を作成しようとしています。TCollection
つまり、 type の要素の特定の型のコレクション ( ) を取る必要がありTEl
ます。メソッドが、パラメーターと同じタイプの要素を含む同じタイプのコレクションを返すようにします。
これは私がこれまでに試したことです:
internal static TCollection FisherYatesShuffle<TCollection, TEl>(this TCollection objects)
where TCollection : IEnumerable<TEl>
{
var ret = new TEl[objects.Count()];
ret[0] = objects.First();
var rand = new Random();
for (var i = 1; i < objects.Count(); i++)
{
var j = rand.Next(0, i);
ret[i] = ret[j];
ret[j] = objects.ElementAt(i);
}
return ret; //CS0029: Cannot implicitly convert type 'TEl[]' to 'TCollection'
//return (TCollection)ret; //CS0030: Cannot convert type 'TEl[]' to 'TCollection'
}
使用しようとしているジェネリックのタイプは可能ですか? もしそうなら、どのように方法を変更する必要がありますか?