2011-01-26 103 views
6

我想写一个C#程序,它以随机顺序执行几个方法A(),B()和C()。我怎样才能做到这一点?以随机顺序调用方法(C#)

+2

Gjorgji的GUID想法是可怕的。请至少按随机顺序排序 - 或者更好的是,使用最多的投票算法。从这些选票中得到暗示 - 社区告诉你哪一个更好。 – 2011-01-26 02:04:10

+0

一个非常可怕的想法,这就是为什么你不会在谷歌找到任何东西,如果你寻找它http://www.google.com/search?q=orderby+%22Guid.NewGuid%22 – 2011-01-26 02:30:16

回答

14

假设宣布这样一个随机数生成器:

public static Random Rnd = new Random(); 

让我们定义一个Shuffle功能带来了列表到随机顺序:中romkyns

/// <summary> 
/// Brings the elements of the given list into a random order 
/// </summary> 
/// <typeparam name="T">Type of elements in the list.</typeparam> 
/// <param name="list">List to shuffle.</param> 
/// <returns>The list operated on.</returns> 
public static IList<T> Shuffle<T>(this IList<T> list) 
{ 
    if (list == null) 
     throw new ArgumentNullException("list"); 
    for (int j = list.Count; j >= 1; j--) 
    { 
     int item = Rnd.Next(0, j); 
     if (item < j - 1) 
     { 
      var t = list[item]; 
      list[item] = list[j - 1]; 
      list[j - 1] = t; 
     } 
    } 
    return list; 
} 

这个洗牌实施礼遇!

现在只是把列表中的方法,随机播放,然后运行它们:

var list = new List<Action> { A, B, C }; 
list.Shuffle(); 
list.ForEach(method => method());