从不同的泛型列表中随机选择
我正在寻找一种最佳方式,以便从列表中获得一个随机元素,其中T将是不同类型的对象,这些对象不通过基类相关。从不同的泛型列表中随机选择<T>
我一直在创建一个List的扩展方法,或接收List的帮助器方法,但我一直没能把它放在一起。每次遇到处理T的问题时,我都不知道是什么。
是否有可能做到这一点,而无需制作接口或基类?因为我看不到任何实现不同T的基类或接口的有意义的方法。
问候 加斯帕豪格
有关通用方法的一些更多的阅读后,我设法编写一些代码自己。这是我的解决方案:
public static class ListExt
{
public static T RandomItem<T>(this List<T> list)
{
if (list.Count == 0)
return default(T);
if (list.Count == 1)
return list[0];
Random rnd = new Random(DateTime.Now.Millisecond);
return list[(rnd.Next(0, list.Count))];
}
}
这是一个扩展方法,可实现从任何列表中选择一个随机项与下面的代码:
private Picture SelectTopPic()
{
List<Picture> pictures = GetPictureList();
return pictures.RandomItem();
}
结束了一个扩展方法,示出作为附录原始讯息去。
.Hauge
有作为“对象不是通过一个基类相关没有这样的事”。如果没有别的,你总会有object
s。所以List<object>
会做你想做的。
要从列表中获得随机元素,您可以使用。 ElementAt方法,传递要检索的元素的随机生成的索引。
实际上有如何从该列表中检索一个随机元素,在上述那MSDN链接的示例:
Random random = new Random(DateTime.Now.Millisecond);
object randomItem = yourList.ElementAt(random.Next(0, yourList.Length));
List
为什么不把一个函数,它得到一个列表和通过仅选择第n个元素,其中n是与列表的长度为0的数返回一个T' –
2010-01-11 11:25:53
我可能没有足够清楚地解释我的问题是什么,但是我找到了适合我的解决方案 - 将我的代码添加到了帖子中。 感谢您的回答/评论 – Hauge 2010-01-11 12:01:06