Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
方法按随机顺序调用(C#)_C# - Fatal编程技术网

方法按随机顺序调用(C#)

方法按随机顺序调用(C#),c#,C#,我想写一个C#程序,以随机顺序执行几个方法a()、B()和C()。我该怎么做呢?假设一个随机数生成器声明如下: public static Random Rnd = new Random(); 让我们定义一个Shuffle函数,将列表按随机顺序排列: /// <summary> /// Brings the elements of the given list into a random order /// </summary> /// <typeparam na

我想写一个C#程序,以随机顺序执行几个方法a()、B()和C()。我该怎么做呢?

假设一个随机数生成器声明如下:

public static Random Rnd = new Random();
让我们定义一个
Shuffle
函数,将列表按随机顺序排列:

/// <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;
}
//
///将给定列表的元素按随机顺序排列
/// 
///列表中元素的类型。
///要洗牌的列表。
///名单继续运作。
公共静态IList Shuffle(此IList列表)
{
if(list==null)
抛出新的ArgumentNullException(“列表”);
对于(int j=list.Count;j>=1;j--)
{
int item=Rnd.Next(0,j);
如果(项目
这是洗牌执行的礼节

现在只需将这些方法放入列表中,洗牌,然后运行它们:

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

在Linq中洗牌最简单的方法是使用OrderBy(m=>Guid.NewGuid())@Pauli:编写一个有时会输出垃圾的程序总是比编写一个工作可靠的程序容易。在您的使用示例中,您不是在丢弃洗牌的结果吗?不应该是:list.Shuffle().ForEach(method=>method())@杰森:那也行,它也会做同样的事情。该方法返回与您输入的列表相同的列表;使用该返回值还是原始列表引用没有区别。他们指向同一个列表,这个列表现在被洗牌了。Gjorgji,GUID的想法太糟糕了。请至少随机排序,或者更好,使用投票最多的算法。从这些投票中得到提示-社区正在告诉你哪一个更好。这是一个非常糟糕的想法,这就是为什么你在谷歌上找不到任何东西@Pauli,你的信念是,你在谷歌上找到的任何东西都会自动成为一个好主意?@Eric:我相信互联网上的一切。@Pauli,在收到6张反对票和无数解释错误的评论(包括埃里克·利珀特的两条评论)后,你有一些严重的神经在争论你的观点。它正在变得非常清楚,你们在这里不是为了给出正确的答案,也不是为了学习任何东西;你来这里是为了增强你的自尊心。