返回相同类型的集合的相同类型
本文关键字:同类型 集合 返回 | 更新日期: 2023-09-27 18:07:40
我正在尝试创建一个洗牌集合的方法。我希望它是泛型的,这意味着它应该采用TEl
类型元素的特定类型的集合(TCollection
)。我希望该方法返回与参数相同类型的集合包含相同类型的元素。
这是我到目前为止所尝试的:
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'
}
我尝试使用的泛型类型是否可能?如果是,我要如何改变我的方法?
您最好使用:
where TCollection : IList<TEl>, new()
和
var result = new TCollection();
...
result.Add(item)
...
return result;
这对数组不起作用-可能需要对它们进行特殊处理。