web-dev-qa-db-fra.com

Enum Naming Convention - Plural

Je pose cette question en dépit d'avoir lu similaire mais pas exactement ce que je veux à convention de nommage C # pour enum et propriété correspondante

J'ai trouvé que j'avais tendance à nommer les enums 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 est-ce que quelqu'un peut trouver un problème potentiel avec une telle convention? J'ai un nom "moche" avec le mot "Status" cependant:

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

Informations additionnelles: 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éfinis enum. Je connais les meilleures pratiques, mais cela n’aide en rien à nommer ces variables.

Je ne peux pas exposer toutes mes propriétés enum (dites "Status") en tant que "MyStatus".

Ma question: Quelqu'un peut-il trouver un problème potentiel avec la convention décrite ci-dessus? Il ne s'agit pas de la meilleure pratique.

Reformuler la question:

Eh bien, je suppose que je devrais poser la question de la manière suivante: quelqu'un peut-il trouver un bon moyen générique de nommer le type enum de telle sorte que, lorsqu'il est utilisé, le nom de l'instance 'enum' sera assez simple?

240
o.k.w

Microsoft recommande d'utiliser le singulier pour Enums sauf si Enum représente des champs de bits (utilisez également le FlagsAttribute ). Reportez-vous à Conventions de dénomination des types d'énumération (sous-ensemble des directives de dénomination de Microsoft ).

Pour répondre à votre clarification, je ne vois rien de mal à l’un des éléments suivants:

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass { 
    public OrderStatus OrderStatus { get; set; }
}

ou

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass {
    public OrderStatus Status { get; set; }
}
305
jason

J'ai commencé par nommer des enums au pluriel, mais j'ai depuis changé au singulier. Cela semble plus logique dans le contexte de leur utilisation.

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

Comparer aux:

Statuses myStatus = Statuses.Ready;

Je trouve que la forme singulière semble plus naturelle dans son contexte. Nous sommes d’accord pour dire que lorsqu’on déclare l’énum, ​​ce qui se passe à un endroit donné, on se dit "c’est un groupe de whatevers", mais lorsqu’on l’utilise, vraisemblablement dans de nombreux endroits, on pense "c’est un peu importe" .

33
Bob Kaufman

La situation ne s'applique jamais vraiment au pluriel.

Un enum montre un attribut de telle ou telle chose. Je vais donner un exemple:

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

Vous pouvez avoir un type, mais essayez d'y penser dans le multiple plutôt que dans le 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.

23
Kyle Rozendo

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 plurielles.

Après avoir lu votre question modifiée, j'ai l’impression que vous pensez que le nom de la propriété ou le nom de la variable doit être différent du nom du type enum ... Ce n’est pas le cas. Ce qui suit est parfaitement bien ...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }
13
Charles Bretana

C’est l’un des rares endroits où je suis assez en désaccord avec la convention pour aller à l’encontre de cette convention. 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 que cela indique clairement le contexte dans un usage donné. OMI cela rend le code beaucoup plus lisible.

public enum PersonTypesEnum {
    smart,
    sad,
    funny,
    angry
}


public class Person {   
    public PersonTypesEnum PersonType {get; set;}
}

Personne ne confondra jamais ce qui est l'énum et son exemple.

8
Heather

Si vous essayez d'écrire du code simple, mais interdit, comme ceci:

    public class Person
    {
        public enum Gender
        {
            Male,
            Female
        }
        //Won't compile: auto-property has same name as enum
        public Gender Gender { get; set; }  
    }

Vos options sont:

  1. Ignorez la recommandation de la MS et utilisez un préfixe ou un suffixe sur le nom de l’énumération:

    public class Person
    {
        public enum GenderEnum
        {
            Male,
            Female
        }
        public GenderEnum Gender { get; set; }
    }
    
  2. Déplacez la définition enum en dehors de la classe, de préférence dans une autre classe. Voici une solution simple à ce qui précède:

    public class Characteristics
    {
        public enum Gender
        {
            Male,
            Female
        }
    }
    public class Person
    {
        public Characteristics.Gender Gender { get; set; }  
    }
    
6
MiloNC

Meilleure pratique - utilisez singulier. Vous avez une liste d'éléments qui constituent un Enum. Utiliser un élément de la liste semble étrange quand vous dites Versions.1_0. Il est plus logique de dire Version.1_0 puisqu'il n'y a qu'une seule version 1_0.

6
Jeremy Cron

Arriver un peu en retard ...

Il y a une différence importante entre votre question et celle vous mentionnez (que j'ai posée ;-):

Vous mettez la définition enum hors de la classe, ce qui vous permet d'avoir le même nom pour l'énum et la propriété:

public enum EntityType { 
  Type1, Type2 
} 

public class SomeClass { 
  public EntityType EntityType {get; set;} // This is legal

}

Dans ce cas, je suivrais les directives MS et utiliserais un nom singulier pour l’énum (pluriel pour les drapeaux). C'est probablement la solution la plus simple.

Mon problème (dans le autre question ) est lorsque l’énum est défini dans le domaine de la classe, ce qui empêche l’utilisation d’une propriété nommée exactement après l’énum.

5
Serge Wautier

Sur l’autre fil convention de nommage C # pour enum et propriété correspondante 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 nommage .NET, mais je préfixe personnellement les énumérations avec" E "et les drapeaux enum avec" F "(comme nous préfixons Interfaces avec" I ")."

0
RenniePet