鉴于一组约20个枚举,我无法修改。
我正在寻找一种优雅的解决方案来生成特定样本的随机枚举(即2,7,18)
我可以将这些放入arraylist,但我想我会问是否还有别的东西可以尝试。
答案 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();
}