我正在尋找一種最佳方式,以便從列表中獲得一個隨機元素,其中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();
}
爲什麼不把一個函數,它得到一個列表和通過僅選擇第n個元素,其中n是與列表的長度爲0的數返回一個T' –
2010-01-11 11:25:53
我可能沒有足夠清楚地解釋我的問題是什麼,但是我找到了適合我的解決方案 - 將我的代碼添加到了帖子中。 感謝您的回答/評論 – Hauge 2010-01-11 12:01:06