2010-02-24 41 views
12

Es thre alguna manera de tener una entrada de enumeración con un guión "-" en el nombre, por ejemplo:Puede una entrada enumeración C# tienen un guión en el nombre de

enum myEnum 
{ 
    ok, 
    not-ok, 
} 

he visto el pregunta sobre enums having friendly names sin embargo, me ahorraría un poco de trabajo si puedo usar un guión directamente.

Actualización: La razón por la que quiero usar un guión es que hace que sea fácil de usar una enumeración de las listas de valores de ajuste que no tengo ningún control sobre tales como:

rejected 
replaced 
local-bye 
remote-bye 
+7

Si está tratando de dividir palabras del valor de Enum, intente utilizar CamelCase – benPearce

+0

-1 Los lenguajes de programación no son por medio de un lenguaje humano, y por lo tanto pueden no entender cada variación que somos capaces de hacer. En cualquier lenguaje de programación con el que he trabajado, nunca he visto guiones, excepto el identificador entre comillas en TSQL o PLSQL, que permite principalmente la conveniente convención de nomenclatura de columnas según el conjunto de resultados. CamelCase es el enfoque lejos de la red. –

+0

@Will Marcouiller: ¡Gracias por una idea tan sorprendente! – sipwiz

Respuesta

20

No, un guión no es permitido.

Identifiers

podría reemplazar obviamente el guión con un guión bajo, pero como se sugiere @benPearce, CamelCase sería una mejor opción, y en línea con la mayoría de los estándares de codificación C#.

+1

En realidad, he estado revisando esa página. No entiendo por qué no podían simplemente poner _ en lugar de Pc y una referencia al documento Unicode. – sipwiz

+0

Todavía no puedo encontrar la definición oficial de "puntuaciones de conector" – Greg

14

Suponga que tiene:

enum E { a = 100 , a-b = 200 }; 
... 

E b = E.a; 
int c = (int)(E.a-b); 

es SET C a 200, ó 0?

Permitir guiones en los identificadores haría que el lenguaje sea casi imposible de analizar léxicamente. Este lenguaje ya es suficientemente difícil para analizar lo que con << y >> teniendo cada uno dos significados completamente diferentes; no queremos que sea más difícil para nosotros mismos.

Las directrices de nomenclatura dicen que se debe usar CamelCasing para valores enum; sigue las pautas

+0

Me encantaría seguir las directrices, pero la lista de cadenas que la enumeración necesita para representar está fuera de mi control. El análisis léxico puede ser difícil obtener media docena de RFC para eliminar palabras con guiones no es fácil tampoco. – sipwiz

0

Usted dice "Me encantaría seguir las pautas, pero la lista de cadenas que la enumeración necesita para representar está fuera de mi control". Como esta es la razón por la que desea guiones, le sugiero que anule el método toString() de las enumeraciones para las que lo necesita y llame aString() en su código donde necesita representar los nombres.

+0

Posible, pero los atributos tienen más sentido (ver el enlace en la pregunta). Sobrescribir ToString() solo para obtener nombres amigables no es razonable. –

4

En caso de que alguien necesite usar guiones, creo que este enfoque puede ayudar: Use guión bajo en su declaración enum y luego reemplace el guión bajo con guión.

enum myEnum { ok, not_ok, } 

var test = myEnum.not_ok; 
// let's say this value is coming from database or somewhere else 
var someValue = "not-ok"; 

if(test.ToString().Replace("_","-").equals(someValue)) { /* some stuff */ } 

No es la mejor práctica, pero puede ayudar si usted no tiene control sobre "someValue" y la necesidad de usar las enumeraciones.

Cuestiones relacionadas