Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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#_Random_Enums - Fatal编程技术网

C# 从选择的组中获取随机枚举

C# 从选择的组中获取随机枚举,c#,random,enums,C#,Random,Enums,给定一组我无法修改的大约20个枚举 我在寻找一个优雅的解决方案,从一个特定的样本(即,2,7,18)生成一个随机枚举 我可以将它们放入arraylist中,但我想问一下是否还有其他方法可以尝试。您可以通过以下方法获取给定枚举类型的所有值: var values = Enum.GetValues(typeof(MyEnum)); 如果您的值都是相同类型的: MyEnum[] values = { MyEnum.Value2, MyEnum.Value7, MyEnum.Value18 }; Ra

给定一组我无法修改的大约20个枚举

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


我可以将它们放入arraylist中,但我想问一下是否还有其他方法可以尝试。

您可以通过以下方法获取给定枚举类型的所有值:

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

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

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

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


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

我开发了一个快速控制台应用程序,它可以做这样的事情,但无法证明它的性能:)


为什么这么复杂

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

GetRandomEnum<MyEnumType>()
GetRandomEnum()

您所说的“一组大约20个枚举”是什么意思。你是说有20个枚举数的枚举吗?你能发布一个代码示例吗?虽然这段代码可能会解决这个问题,但需要一个解释才能给出答案。
GetRandomEnum<MyEnumType>()
    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();
    }