Je pose cette question malgré la lecture similaire mais pas exactement ce que je veux à la convention de nommage C # pour l'énumération et la propriété correspondante
J'ai trouvé que j'avais tendance à nommer les énumérations au pluriel, puis à les «utiliser» au singulier, par exemple:
public enum EntityTypes {
Type1, Type2
}
public class SomeClass {
/*
some codes
*/
public EntityTypes EntityType {get; set;}
}
Bien sûr, cela fonctionne et c'est mon style, mais quelqu'un peut-il trouver un problème potentiel avec une telle convention? J'ai un nom "moche" avec le mot "Statut" cependant:
public enum OrderStatuses {
Pending, Fulfilled, Error, Blah, Blah
}
public class SomeClass {
/*
some codes
*/
public OrderStatuses OrderStatus {get; set;}
}
Informations supplémentaires: Peut-être que ma question n'était pas assez claire. Je dois souvent réfléchir sérieusement lorsque je nomme les variables des types d'enum définis. Je connais la meilleure pratique, mais cela n'aide pas à faciliter mon travail de nommer ces variables.
Je ne peux pas exposer toutes mes propriétés enum (dites "Status") comme "MyStatus".
Ma question: quelqu'un peut-il trouver un problème potentiel avec ma convention décrite ci-dessus? Il ne s'agit PAS des meilleures pratiques.
Reformulation de la question:
Eh bien, je suppose que je devrais poser la question de cette façon: quelqu'un peut-il trouver un bon moyen générique de nommer le type d'énumération de telle sorte que lorsqu'il est utilisé, le nom de l'instance d'énumération sera assez simple?
Réponses:
Microsoft recommande d'utiliser le singulier pour
Enum
s sauf si lesEnum
champs de bits représentent (utilisezFlagsAttribute
également le). Voir Conventions de dénomination des types d'énumération (un sous-ensemble des directives de dénomination de Microsoft ).Pour répondre à votre clarification, je ne vois rien de mal à l'un ou l'autre des éléments suivants:
ou
la source
OrderStatus == OrderStatus.Pending
- d. est reconnu comme une variable pour la gauche et ensuite une énumération sur la droiteJ'ai commencé par nommer des énumérations au pluriel, mais j'ai depuis changé au singulier. Semble tout simplement plus logique dans le contexte de leur utilisation.
Comparer aux:
Je trouve que la forme singulière semble plus naturelle dans son contexte. Nous sommes d'accord que lorsque nous déclarons l'énumération, qui se produit en un seul endroit, nous pensons "c'est un groupe de personnes", mais lorsque nous l'utilisons, vraisemblablement dans de nombreux endroits, nous pensons que "c'est celui qui est" .
la source
0
pour la valeur inconnue, de cette façon une variable non initialisée est par défautUnknown
.[Flags]
attribut sur votre exemple? Il n'est pas logique qu'un élément ait à la fois le statut «Incomplet» et «Prêt». Si c'était le casenum [Flags]Steps { First, Second, Third }
, nommeriez-vous vraiment votre variablecompletedStep
?La situation ne s'applique jamais vraiment au pluriel.
Un
enum
montre un attribut de quelque chose ou d'un autre. Je vais donner un exemple:Vous pouvez avoir un seul type, mais essayez de le penser au multiple plutôt qu'au pluriel:
Humour.Irony | Humour.Sarcasm
Plutôt que
Humours { Irony, Sarcasm }
Vous avez le sens de l'humour, vous n'avez pas le sens de l'humour.
la source
Humours
contenirHumours.Irony | Huomours.Sarcasm
??En général, la recommandation de meilleure pratique est singulière, à l'exception des énumérations auxquelles l'attribut [Flags] est attaché (et qui peuvent donc contenir des champs de bits), qui doivent être pluriels.
Après avoir lu votre question modifiée, j'ai l'impression que vous pouvez penser que le nom de la propriété ou le nom de la variable doit être différent du nom du type d'énumération ... Ce n'est pas le cas. Ce qui suit est parfaitement bien ...
la source
public Color Color { get {...} set {...} }
C'est l'un des rares endroits où je suis assez en désaccord avec la convention pour aller à son encontre. TBH, je déteste que la définition d'une énumération et son instance puissent avoir le même nom. Je postfixe tous mes Enums avec "Enum" spécifiquement parce qu'il indique clairement quel est le contexte dans une utilisation donnée. OMI, il rend le code beaucoup plus lisible.
Personne ne confondra jamais ce qu'est l'énumération et quelle en est l'instance.
la source
Enum
? Ce n'est pas comme si l'auteur proposait de postfixer tous les vars avec leur type. L'auteur a également un cas beaucoup plus solide étant donné qu'une raison est fournie, alors que M $ fournit une justification nulle.Si vous essayez d'écrire du code simple mais pourtant interdit comme ceci:
Vos options sont:
Ignorez la recommandation MS et utilisez un préfixe ou un suffixe sur le nom de l'énumération:
Déplacez la définition d'énumération en dehors de la classe, de préférence dans une autre classe. Voici une solution simple à ce qui précède:
la source
enum
en premier lieu, puis l'imbriquer dans une autre classe si cela pose problème?Gender
et le nom d'énumération asSex
. Alorsisac.Gender = Sex.Male
..Meilleure pratique - utilisez le singulier. Vous avez une liste d'éléments qui composent un Enum. L'utilisation d'un élément de la liste semble étrange lorsque vous dites
Versions.1_0
. Il est plus logique de direVersion.1_0
qu'il n'y a qu'une seule version 1_0.la source
J'arrive un peu tard ...
Il y a une différence importante entre votre question et celle que vous mentionnez (que j'ai posée ;-):
Vous mettez la définition d'énumération hors de la classe, ce qui vous permet d'avoir le même nom pour l'énumération et la propriété:
Dans ce cas, je suivrais les lignes directrices de MS et utiliserais un nom singulier pour l'énumération (pluriel pour les drapeaux). C'est probablement la solution la plus simple.
Mon problème (dans l' autre question ) est lorsque l'énumération est définie dans la portée de la classe, empêchant l'utilisation d'une propriété nommée exactement après l'énumération.
la source
Sur l'autre thread, convention de nommage C # pour l'énumération et la propriété de correspondance, quelqu'un a souligné ce que je pense être une très bonne idée:
"Je sais que ma suggestion va à l'encontre des conventions de dénomination .NET, mais je préfixe personnellement les énumérations avec 'E' et les indicateurs d'énumération avec 'F' (de la même manière que nous préfixons les interfaces avec 'I')."
la source