Estou fazendo esta pergunta, apesar de ter lido semelhante, mas não exatamente o que eu quero na convenção de nomenclatura C # para enum e propriedade correspondente
Descobri que tenho uma tendência a nomear enums no plural e depois 'usá-las' como singular, por exemplo:
public enum EntityTypes {
Type1, Type2
}
public class SomeClass {
/*
some codes
*/
public EntityTypes EntityType {get; set;}
}
Claro que funciona e esse é o meu estilo, mas alguém pode encontrar um problema em potencial com essa convenção? Eu tenho um nome "feio" com a palavra "Status":
public enum OrderStatuses {
Pending, Fulfilled, Error, Blah, Blah
}
public class SomeClass {
/*
some codes
*/
public OrderStatuses OrderStatus {get; set;}
}
Informações adicionais: Talvez minha pergunta não tenha sido clara o suficiente. Muitas vezes tenho que pensar bastante ao nomear as variáveis dos meus tipos de enumeração definidos. Conheço a melhor prática, mas não ajuda a facilitar meu trabalho de nomear essas variáveis.
Não é possível expor todas as minhas propriedades de enum (diga "Status") como "MyStatus".
Minha pergunta: alguém pode encontrar um problema em potencial com minha convenção descrita acima? NÃO é sobre as melhores práticas.
Pergunta reformulada:
Bem, acho que devo fazer a pergunta desta maneira: alguém pode apresentar uma boa maneira genérica de nomear o tipo de enum, de modo que, quando usada, a nomeação da 'instância' do enum seja bastante direta?
Respostas:
A Microsoft recomenda o uso de singular para
Enum
s, a menos que osEnum
campos de bits representem (useFlagsAttribute
também). Consulte Convenções de nomenclatura de tipos de enumeração (um subconjunto das Diretrizes de nomenclatura da Microsoft ).Para responder ao seu esclarecimento, não vejo nada de errado com um dos seguintes:
ou
fonte
OrderStatus == OrderStatus.Pending
é reconhecida como uma variável para a esquerda e, em seguida, uma enumeração à direitaComecei nomeando enums no plural, mas depois mudei para singular. Apenas parece fazer mais sentido no contexto de onde eles são usados.
Comparado a:
Acho que a forma singular soa mais natural no contexto. Estamos de acordo em que, ao declarar o enum, que acontece em um só lugar, estamos pensando "este é um grupo de coisas assim", mas ao usá-lo, presumivelmente em muitos lugares, que estamos pensando "este é um que seja" .
fonte
0
para o valor desconhecido, dessa maneira uma variável não inicializada é por padrãoUnknown
.[Flags]
atributo no seu exemplo? Não faz sentido que algo tenha um status de "Incompleto" e "Pronto". Se você tivesseenum [Flags]Steps { First, Second, Third }
, você realmente nomearia sua variávelcompletedStep
?A situação nunca se aplica realmente ao plural.
Um
enum
mostra um atributo de algo ou de outro. Vou dar um exemplo:Você pode ter um tipo, mas tente pensar no múltiplo, e não no plural:
Humour.Irony | Humour.Sarcasm
Ao invés de
Humours { Irony, Sarcasm }
Você tem senso de humor, não tem senso de humor.
fonte
Humours
contenhaHumours.Irony | Huomours.Sarcasm
?Em geral, a recomendação de melhores práticas é singular, exceto aquelas enumerações que possuem o atributo [Flags] anexado a elas (e que, portanto, podem conter campos de bits), que devem ser plurais.
Depois de ler sua pergunta editada, sinto que você pode pensar que o nome da propriedade ou o nome da variável deve ser diferente do nome do tipo de enumeração ... Não é. O seguinte está perfeitamente bem ...
fonte
public Color Color { get {...} set {...} }
Este é um dos poucos lugares em que discordo da convenção o suficiente para ir contra ela. TBH, ODEIO que a definição de uma enumeração e a instância dela possam ter o mesmo nome. Posfixo todos os meus Enums com "Enum" especificamente porque deixa claro qual é o contexto dele em um determinado uso. OMI torna o código muito mais legível.
Ninguém jamais confundirá qual é a enum e qual é a instância dela.
fonte
Enum
? Não é como se o autor estivesse propondo pós-fixar todos os vars com seu tipo. O autor também tem um argumento muito mais forte, uma vez que o motivo é fornecido, enquanto o M $ fornece justificação zero.Se você está tentando escrever um código simples, mas proibido, como este:
Suas opções são:
Ignore a recomendação da MS e use um prefixo ou sufixo no nome da enumeração:
Mova a definição de enum para fora da classe, de preferência para outra classe. Aqui está uma solução fácil para o acima:
fonte
enum
em primeiro lugar e aninhá-lo em outra classe, se isso causa problemas?Gender
e o nome da enumeração comoSex
. Entãoisac.Gender = Sex.Male
..Prática recomendada - use singular. Você tem uma lista de itens que compõem um Enum. Usar um item da lista parece estranho quando você diz
Versions.1_0
. Faz mais sentido dizerVersion.1_0
que existe apenas uma versão 1_0.fonte
Chegando um pouco tarde ...
Há uma diferença importante entre sua pergunta e a que você mencionou (que eu perguntei ;-):
Você coloca a definição de enum fora da classe, o que permite que você tenha o mesmo nome para o enum e a propriedade:
Nesse caso, eu seguiria as diretrizes da MS e usaria um nome singular para o enum (plural para sinalizadores). É provavelmente a solução mais fácil.
Meu problema (na outra pergunta ) é quando o enum é definido no escopo da classe, impedindo o uso de uma propriedade nomeada exatamente após o enum.
fonte
Na outra convenção de nomenclatura C # para enum e propriedade correspondente, alguém apontou o que eu acho uma ótima idéia:
"Sei que minha sugestão é contrária às convenções de nomenclatura do .NET, mas pessoalmente prefixo enumerações com 'E' e sinalizadores de enumeração com 'F' (semelhante à forma como prefixamos Interfaces com 'I')."
fonte