从具有不同<T>的通用列表中随机选择

Hau*_*uge 5 c# generics

我正在寻找最好的方法来从List中获取一个随机元素,其中T将是通过基类无关的不同类型的对象.

我一直在为List创建一个扩展方法,或者是一个收到List的帮助方法,但我还是没能把它放在一起.每次我遇到处理T的问题我都不知道是什么.

是否可以在不创建接口或基类的情况下执行此操作?因为我看不到为不同的T实现基类或接口的任何有意义的方法.

关于Jesper Hauge


在更多关于泛型方法的阅读之后,我设法自己编写了一些代码.这是我的解决方案:

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))];
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一种扩展方法,可以使用以下代码从任何List中选择随机项:

private Picture SelectTopPic()
{
    List<Picture> pictures = GetPictureList();
    return pictures.RandomItem();
}
Run Code Online (Sandbox Code Playgroud)

Hau*_*uge 1

最终采用了扩展方法,如原始帖子的附录所示。

.豪格