2010-06-10 5 views
3

Étant donné un groupe d'environ 20 énumérations que je ne peux pas modifier.Récupérer une énumération aléatoire à partir d'un groupe sélectionné

Im la recherche d'une solution élégante pour générer un ENUM aléatoire à partir d'un échantillon spécifique (par exemple, 2, 7, 18)

Je pourrais les mettre en un arraylist, mais je pensais que je voudrais demander s'il y a autre chose Je pourrais essayer.

+0

Que voulez-vous dire par « un groupe d'ab 20 enums ". Voulez-vous dire une énumération avec 20 recenseurs? Pouvez-vous poster un échantillon de code? –

Répondre

2

Vous pouvez obtenir toutes les valeurs pour un type enum donné avec:

var values = Enum.GetValues(typeof(MyEnum)); 
3

Si vos valeurs sont toutes du même type:

MyEnum[] values = { MyEnum.Value2, MyEnum.Value7, MyEnum.Value18 }; 
Random random = new Random(); 
MyEnum randomValue = values[random.Next(values.Length)]; 
0

La solution la plus simple est de mettre ces énumérations vous vouloir choisir dans un tableau ou une liste d'une sorte et choisir au hasard à partir de cela.

Si vous venez de choisir au hasard dans la définition complète, vous devrez vérifier la réponse et rejeter ceux que vous ne voulez pas.

0

Je frappai une application console rapide qui fait quelque chose comme ça, ne peut pas attester de la façon dont il est si performant :)

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()); 
     } 
    } 
} 
0

Pourquoi ce si compliqué ...

private static T GetRandomEnum<T>() 
{ 
    return Enum.GetValues(typeof(T)).Cast<T>().OrderBy(e => Guid.NewGuid()).First(); 
} 

Utilisation:

GetRandomEnum<MyEnumType>() 
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(); 
    } 
+1

Bien que ce code puisse résoudre le problème, une explication est nécessaire pour parvenir à une réponse. – BDL

Questions connexes