gpt4 book ai didi

c# - 返回同类型的同类型集合

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:52 25 4
gpt4 key购买 nike

我正在尝试创建一种对集合进行洗牌的方法。我希望它是通用的,这意味着它应该采用类型为 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;

虽然这不适用于数组 - 可能需要对它们进行特殊处理。

关于c# - 返回同类型的同类型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15853210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com