Dada una enumeración arbitraria en C #, ¿cómo selecciono un valor aleatorio?
(No encontré esta pregunta muy básica sobre SO. Publicaré mi respuesta en un minuto como referencia para cualquiera, pero no dude en publicar su propia respuesta).
Array values = Enum.GetValues(typeof(Bar));
Random random = new Random();
Bar randomBar = (Bar)values.GetValue(random.Next(values.Length));
random
embargo, asegúrese de no seguir recreando en un ciclo cerrado; de lo contrario, seguirá obteniendo el mismo valor.Use Enum.GetValues para recuperar una matriz de todos los valores. Luego seleccione un elemento de matriz aleatorio.
Prueba:
->
fuente
Podrías hacer esto:
No es necesario almacenar matrices
fuente
GetNames
devuelve una matrizAquí hay una versión alternativa como un
Extension Method
usoLINQ
.fuente
Llamada
Enum.GetValues
; esto devuelve una matriz que representa todos los valores posibles para su enumeración. Elija un elemento aleatorio de esta matriz. Devuelve ese elemento al tipo de enumeración original.fuente
Aquí hay una función genérica para ello. Mantenga la creación de RNG fuera del código de alta frecuencia.
Ejemplo de uso:
fuente
Personalmente, soy un fanático de los métodos de extensión, por lo que usaría algo como esto (aunque en realidad no es una extensión, se ve similar):
fuente
public static T Of<T>() where T : Enum
docs.microsoft.com/en-us/visualstudio/releasenotes/…Adaptado como una extensión de clase aleatoria:
Ejemplo de uso:
fuente
También puede emitir un valor aleatorio:
Pero deberías usar un mejor aleatorizador como el de esta biblioteca mía.
fuente