从选定组中获取随机枚举

时间:2010-06-10 13:13:47

标签: c# random enums

鉴于一组约20个枚举,我无法修改。

我正在寻找一种优雅的解决方案来生成特定样本的随机枚举(即2,7,18)

我可以将这些放入arraylist,但我想我会问是否还有别的东西可以尝试。

6 个答案:

答案 0 :(得分:3)

如果您的值都是相同的类型:

MyEnum[] values = { MyEnum.Value2, MyEnum.Value7, MyEnum.Value18 };
Random random = new Random();
MyEnum randomValue = values[random.Next(values.Length)];

答案 1 :(得分:2)

您可以使用以下内容获取给定枚举类型的所有值:

var values = Enum.GetValues(typeof(MyEnum));

答案 2 :(得分:0)

最简单的解决方案是将您想要选择的枚举放入某种数组或列表中,然后随机选择。

如果您只是从完整定义中随机选择,则必须检查答案并拒绝那些您不想要的答案。

答案 3 :(得分:0)

我敲了一个快速的控制台应用程序做了类似的事情,虽然不能证明它的性能如何:)

using System;

namespace RandomEnum
{
    class Program
    {
        private enum TestEnum
        {
            One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
        };

        static void Main(string[] args)
        {
            string[] names = Enum.GetNames(typeof (TestEnum));

            Random random = new Random();

            int randomEnum = random.Next(names.Length);

            var ret = Enum.Parse(typeof (TestEnum), names[randomEnum]);

            Console.WriteLine(ret.ToString());
        }
    }
}

答案 4 :(得分:0)

为什么这么复杂......

private static T GetRandomEnum<T>()
{
    return Enum.GetValues(typeof(T)).Cast<T>().OrderBy(e => Guid.NewGuid()).First();
}

用法:

GetRandomEnum<MyEnumType>()

答案 5 :(得分:0)

    enum days
    {
        sunday,monday,tuesday,wednesday,thursday,friday,saturday
    }
    static void Main(string[] args)
    {
        Random r = new Random();
        Console.WriteLine(Enum.GetNames(typeof(days))[r.Next(1, 7)]);    
        Console.ReadKey();
    }