2010-06-17 3 views
1

quelqu'un peut-il s'il vous plaît me donner quelques exemples où l'énumération est utilisée? Je ne comprends pas le concept. je veux dire à la fois IEnumerable et enum?but du dénombrement?

avez-vous utilisé enum? s'il vous plaît montrez-moi le code d'échantillon

+5

Voulez-vous dire '' IEnumerable ou 'enum'? – JaredPar

+0

Pouvez-vous clarifier un peu? Vous voulez dire un type qui implémente 'IEnumerable ()', ou comme un 'enum' avec un nombre défini de valeurs? –

+4

@JaredPar, apparemment, il ne le sait pas lui-même ... – Dykam

Répondre

3

Pour des détails sur le poste de Berry:

enum Title 
{ 
Mr =1, 
Mrs, 
Miss 
} 


Un ENUM est un type défini par l'utilisateur. Avec l'énumérateur ci-dessus, vous pouvez créer autant d'instances de titre que vous le souhaitez.

Title mine = Title.Mr; 
Title sister = Title.Miss; 
etc. 



IEnumerable est un tableau de types dénombrables. Le plus utile pour moi en utilisant la déclaration foreach.

IEnumerable<string> list = new[] {"stringone", "string2", "stringthree"}; 

foreach (string s in list) 
{ 
    Console.WriteLine(s); 
} 

produira la sortie suivante:

stringone 
string2 
stringthree 
+2

"Un IEnumerable est un tableau": ce n'est pas un tableau, car vous ne pouvez pas utiliser un indexeur pour accéder aux éléments. Vous ne pouvez utiliser que l'interface 'foreach' ou l'interface' IEnumerator '. –

+0

C'est une liste qui fournit un itérateur pour itérer sur une liste ... contrairement à un tableau, il n'y a pas de valeurs indexées définies. – Armstrongest

0

Allons supposer que vous voulez dire enum sur IEnumerable<T>.

Les énumérations sont idéales pour grouper un ensemble connexe de valeurs nommées de manière semi-sécurisée.
Mon exemple préféré de bon usage d'un enum consiste à remplacer un paramètre booléen.

Par exemple, le code suivant est équivalent, mais on est beaucoup plus lisible que l'autre

String.Compare(str1,str2,true); 
String.Compare(str1,str2,StringComparison.OrdinalIgnoreCase); 
8

Chaque fois que vous avez une sorte de correspondance entre les valeurs magiques et significations, alors vous devriez envisager d'utiliser une énumération à la place. De cette façon, vous pouvez travailler avec les constantes d'énumération au lieu des valeurs magiques directement.

Par exemple, vous pourriez avoir quelque chose comme ceci:

string getDayOfWeek(int dayOfWeek) 
{ 
    if(dayOfWeek == 0) 
    return "saturday"; 
    else if(... 
} 

Au lieu d'utiliser un paramètre d'entrée int que vous pourriez plutôt avoir une énumération définie:

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 
string getDayOfWeek(Days dayOfWeek) 
{ 
    if(dayOfWeek == Days.Sat) 
    return "saturday"; 
    else if(... 
} 

La première variante de la fonction getDayOfWeek est considéré comme mauvais pour 2 raisons:
1) Il est difficile à lire, et donc plus difficile à maintenir et plus facile de faire une erreur dans votre code
2) Si vous voulez changer Sat à maintenant signifier 1 vous avez beaucoup de changements de code à faire

Vous pouvez read more about enumerations here on MSDN.

3

Une énumération est un type qui peut avoir plusieurs valeurs.

Au lieu de déclarer une variable appelée couleur, et en lui attribuant la chaîne « bleu » ou « vert »

vous pouvez créer une énumération, et définir les couleurs bleu, vert, etc.

Cela permet au Le compilateur applique des restrictions si votre application ne supporte pas le rouge par exemple.

Sinon, vous obtiendrez un bogue d'exécution qui serait plus difficile à déboguer et/ou une routine de vérification d'erreurs plus longue.

modifier

Comme DTB dit, dans certaines langues, énumérations ne sont vraiment que des entiers sous les couvertures, il est donc possible d'attribuer des numéros à eux. Si vous les utilisez correctement, vous le ferez, mais c'est néanmoins un point valable.

+0

'var c = (Couleur) 99;' avec enum Couleur {Bleu, Vert} 'est parfaitement bien ... pas sûr de ce que vous voulez dire avec l'application des restrictions ici. – dtb

1

Pour lier des descriptions à des chaînes. Par exemple, dans votre base de données, vous avez une colonne «Statut de l'éducation» qui stocke 0,1,2,3. Ils sont liés à «highschool», «associés», «bachelor» et «maîtres». Dans votre application, vous faites une énumération pour aider à garder ces valeurs droites.

enum int EducationStatus 
{ 
    highschool, 
    associates, 
    bachelor, 
    masters 
} 

donc vous pouvez juste dire

if(yourRecord.EducationStatus == EducationStatus.highschool) 
... 

au lieu de 0. En outre, cela vous aidera à garder les valeurs uniformes au lieu de supposer toujours que 0 signifie highschool, vous utilisez et si elle highschool change à 6, vous faites ce changement en un seul endroit.

2

Une énumération est essentiellement une liste de constantes connexes.

par exemple

enum Title 
{ 
Mr =1, 
Mrs, 
Miss, 
Sir, 
Madame 
} 

Un exemple complet peut être trouvé here

2

Le mot-clé enum déclare une énumération : http://msdn.microsoft.com/en-us/library/sbbt4032(VS.80).aspx

Enum s sont des types qui contiennent un ensemble de constantes définies. Par exemple, vous pouvez avoir un ENUM défini comme ceci:

public enum Months 
{ 
    January = 1, 
    February = 2, 
    March = 3, 
    ... 
    December = 12 
} 

Dans votre code, vous pouvez utiliser cela comme les suivants:

Months birthMonth = Months.February; 

Enum s sont utiles lorsque vous avez plusieurs, des valeurs discrètes pour une variable, et pour augmenter la lisibilité de votre code. Par exemple, lequel des énoncés suivants a une intention plus claire?

File.Open("myFile.txt", 1, 3); 

ou

File.Open("myFile.txt", FileMode.Create, FileAccess.ReadWrite); 
2

IEnumerable<T> est une interface utilisée pour les classes (généralement marquer des collections) qui ont un recenseur; c'est-à-dire que vous pouvez itérer à travers leurs éléments.
IEnumerator<T> est une interface qui contient les méthodes pour parcourir un énumérateur; Habituellement, il est utilisé pour parcourir les éléments d'une collection à la fois. La construction de langage foreach est un compilateur magique pour faire toutes les opérations nécessaires pour itérer à travers un IEnumerator pour vous.
permet de définir une liste des associés, des constantes nommées