2011-06-29 3 views
1

J'ai besoin pour obtenir des valeurs de mon ENUM, donc je me sers commande suivante:Comment obtenir des éléments de tableau simple en C#?

Array a = Enum.GetValues(typeof(Typ)); 

Cependant, l'expression typique un [x] ne fonctionne pas, pourquoi?

Merci

+5

Qu'est-ce que "ne fonctionne pas"? Pourquoi accéder à des éléments spécifiques par des indices arbitraires au lieu d'utiliser les noms de chaque valeur enum? – BoltClock

+1

Je ne peux pas prendre l'elément comme chaîne = a [1]. Juste la notation [] ne fonctionne pas – Mirial

+0

Oui, mais qu'est-ce que "ne fonctionne pas"? Comment ça ne marche pas? Quelle erreur cela donne-t-il? – BoltClock

Répondre

-1

Basé sur les commentaires OPs, il pourrait ne pas être réellement intéressé par les valeurs du Enum, mais au lieu des noms . La distinction peut facilement être source de confusion pour les débutants. Astuce: Lorsque vous posez des questions impliquant une erreur (c'est-à-dire "ne fonctionne pas, pourquoi?"), Il est souvent utile d'inclure le message d'erreur.

Si vous cherchez les noms dans le Enum, essayez:

string[] names = Enum.GetNames(typeof(Typ)); 
4

Eh bien, parce que Enum.GetValues n'est pas générique.

Si vous écrivez:

var a = Enum.GetValues(typeof(Typ)); 
Console.WriteLine(a.GetType()); 

Vous obtiendrez: "Namespace.Typ []". Mais comme la méthode n'est pas générique, le compilateur ne peut pas changer le type retourné en fonction du type fourni. La méthode retourne System.Array qui est le type de base pour les tableaux et vous devez utiliser les casts pour les redescendre au type attendu, par exemple:

Typ[] a = (Typ[])Enum.GetValues(typeof(Typ)); 
0

J'ai utilisé le code suivant pour gérer des emums lors de la conversion d'une classe personnalisée pour les paramètres DB SP, fonctionne tout le temps.

public static object ParamValue<T>(Enum value) 
    { 
     if (value == null) 
      return System.DBNull.Value; 
     else 
      return (T)Enum.Parse(value.GetType(), value.ToString()); 
    } 
2

La bonne façon à mon avis, de le faire est:

Array a = Enum.GetValues(typeof(Typ)); 

puis récupérer des éléments à des positions par:

a.GetValue(elementsIndex); 
Questions connexes