Sử dụng Enum.GetValues để truy xuất một mảng của tất cả các giá trị. Sau đó chọn một mục mảng ngẫu nhiên.
static T RandomEnumValue<T>()
{
var v = Enum.GetValues (typeof (T));
return (T) v.GetValue (new Random().Next(v.Length));
}
Test:
for (int i = 0; i < 10; i++) {
var value = RandomEnumValue<System.DayOfWeek>();
Console.WriteLine (value.ToString());
}
->
Tuesday
Saturday
Wednesday
Monday
Friday
Saturday
Saturday
Saturday
Friday
Wednesday
Cập nhật: Câu trả lời này ban đầu được sử dụng OrderBy (x => _Random.Next()).FirstOrDefault()
để chọn một yếu tố ngẫu nhiên. Chỉ sử dụng nó nếu bạn bị thu hút một cách phi lý bởi các phím ngẫu nhiên. Trong bất kỳ trường hợp nào khác, thay vào đó, hãy sử dụng câu trả lời được chấp nhận bởi Darin Dimitrov, mà tôi đã đưa vào câu trả lời này sau.
Hãy chắc chắn rằng bạn không giữ tái tạo 'random' trong một vòng lặp chặt chẽ mặc dù - nếu không bạn sẽ tiếp tục nhận được giá trị như nhau. – ChrisF
Điều đó có nên ngẫu nhiên không. Tiếp theo (giá trị.Length -1)? – uriDium
@uriDium Không, đối số chỉ định giá trị nào là giá trị đầu tiên quá lớn để trả lại (tức là_max trừ 1_) – mafu