有人可以请我指向一个更简洁的方法来生成随机枚举成员.这有效,但看起来很难看.
谢谢!
public T RandomEnum<T>()
{
string[] items = Enum.GetNames(typeof( T ));
Random r = new Random();
string e = items[r.Next(0, items.Length - 1)];
return (T)Enum.Parse(typeof (T), e, true);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ade 43
public T RandomEnum<T>()
{
T[] values = (T[]) Enum.GetValues(typeof(T));
return values[new Random().Next(0,values.Length)];
}
Run Code Online (Sandbox Code Playgroud)
感谢@ [Marc Gravell],他们认为Random.Next(min,max)中的max是独占的.
Mar*_*ell 15
Marxidad的答案很好(注意你只需要Next(0,values.Length)
,因为上限是排他的) - 但要注意时间.如果你在紧密的循环中这样做,你会得到很多重复.为了使其更随机,请考虑将Random对象保留在字段中 - 即
private Random rand = new Random();
public T RandomEnum<T>()
{
T[] values = (T[]) Enum.GetValues(typeof(T));
return values[rand.Next(0,values.Length)];
}
Run Code Online (Sandbox Code Playgroud)
如果是静态字段,则需要同步访问权限.