Dada uma enumeração arbitrária em C #, como faço para selecionar um valor aleatório?
(Não encontrei esta pergunta muito básica no SO. Vou postar minha resposta em um minuto como referência para qualquer pessoa, mas fique à vontade para postar sua própria resposta.)
random
em um circuito fechado - caso contrário, você continuará recebendo o mesmo valor.Use Enum.GetValues para recuperar uma matriz de todos os valores. Em seguida, selecione um item de matriz aleatória.
Teste:
->
fonte
Você poderia fazer isso:
Não há necessidade de armazenar matrizes
fonte
GetNames
retorna uma matriz.Aqui está uma versão alternativa como uma
Extension Method
utilizaçãoLINQ
.fonte
Chamada
Enum.GetValues
; isso retorna uma matriz que representa todos os valores possíveis para sua enumeração. Escolha um item aleatório dessa matriz. Lance esse item de volta ao tipo de enumeração original.fonte
Aqui está uma função genérica para isso. Mantenha a criação do RNG fora do código de alta frequência.
Exemplo de uso:
fonte
Pessoalmente, sou fã de métodos de extensão, então usaria algo assim (embora não seja realmente uma extensão, é semelhante):
fonte
public static T Of<T>() where T : Enum
docs.microsoft.com/en-us/visualstudio/releasenotes/...Adaptado como uma extensão de classe aleatória:
Exemplo de uso:
fonte
Você também pode converter um valor aleatório:
Mas você deve usar um randomizador melhor como o desta minha biblioteca .
fonte