2009-05-27 6 views
1

J'ai un code qui met en place un dictionnaire avec quelques valeurs defualt pour un ENUM:Obtenir des valeurs d'un ENUM

foreach (string status in Enum.GetNames(typeof(TargetStatusType))) 
{ 
    dict.Add((TargetStatusType)Enum.Parse(typeof(TargetStatusType), status), 0); 
} 

est-il un moyen plus facile de le faire, car il semble un peu en désordre.

J'espérais que je pouvais faire

foreach(TargetStatusType status in ?) ... 

Merci!

Répondre

4

Utilisation Enum.GetValues():

foreach (TargetStatusType type in Enum.GetValues(typeof(TargetStatusType))) 

Notez que bien que GetValues() est seulement déclaré revenir Array, la boucle foreach effectue la distribution pour vous automatiquement. Vous pouvez également convertir le résultat en TargetStatusType[] si vous souhaitez l'utiliser dans une autre boucle où la conversion de chaque valeur serait incommode.

+0

Pippé à la poste encore une fois. :) – Noldorin

+0

Je savais qu'il y aurait quelque chose d'évident, merci :) – Fiona

1

Tout d'abord, il n'est pas nécessaire d'utiliser un dictionnaire ici (ou de créer une sorte de nouvelle collection d'ailleurs). En outre, obtenir les noms des valeurs enum puis en les analysant est une méthode terriblement compliquée lorsque vous pouvez simplement appeler GetValues.

Les éléments suivants doivent faire le travail:

foreach(var status in Enum.GetValues(typeof(TargetStatusType)) 
    .Cast<TargetStatusType>()) 
{ 
    // ... 
} 

L'appel à la méthode d'extension Cast signifie que votre variable status est fortement typé (de type TargetStatusType) plutôt que simplement de type object.

1

si c'est l'initialisation du dictionnaire (pas de valeurs ajoutées avant), vous pouvez également utiliser LINQ dict = Enum.GetValues ​​(typeof (TargetStatusType)). ToDictinary (en => fr, x => 0)

mais je ne peux pas m'empêcher de me demander pourquoi vous les ajouteriez à un dictionnaire. vous pourriez avoir de très bonnes raisons :) Je me demande parce que la valeur est la même. Si c'est pour une recherche, un index de tableau avec la valeur int de l'enum sera beaucoup plus rapide que le dictionnaire. Si vous ne vous souciez pas de la valeur et que vous ne voulez qu'appliquer l'ajout de la clé une fois, vous pouvez utiliser un Hashset <> à la place

Questions connexes