2010-01-27 9 views
40

¿Por qué esta enumeración .NET permite tener una coma en el último campo?
¿Tiene esto algún significado especial?.NET Enumeration permite la coma en el último campo

[FlagsAttribute] 
public enum DependencyPropertyOptions : byte 
{ 
      Default = 1, 
      ReadOnly = 2, 
      Optional = 4, 
      DelegateProperty = 32, 
      Metadata = 8, 
      NonSerialized = 16, 
} 
+21

Porque C# fue diseñado por programadores reales, no como un comité. –

+1

Es lo mismo en C. – acron

+2

Y, C fue diseñado por un comité :) – asyncwait

Respuesta

59

No tiene ningún significado especial, sólo la forma en que funciona el compilador, que es principalmente por esta razón:

[FlagsAttribute] 
public enum DependencyPropertyOptions : byte 
{ 
      Default = 1, 
      ReadOnly = 2, 
      Optional = 4, 
      DelegateProperty = 32, 
      Metadata = 8, 
      NonSerialized = 16, 
      //EnumPropertyIWantToCommentOutEasily = 32 
} 

Por solicitud de comentario: Esta información proviene directamente de la C# Specification (Page 355/Section 17.7)

Al igual que C++ estándar, C# permite una coma al final de un inicializador de matriz. Esta sintaxis proporciona flexibilidad para agregar o eliminar miembros de dicha lista, y simplifica la generación de dichas listas en la máquina.

+2

El compilador funciona de acuerdo con las especificaciones del lenguaje (con, creo, algunas excepciones). La gramática del lenguaje especifica que la coma extraña es legal en este caso (y en algunos otros como inicializadores de objetos, inicializadores de colección e inicializadores de matriz). Además, a menos que sepa con certeza que la gramática fue diseñada por esa razón, probablemente sea más correcto decir que brinda el beneficio que usted enumera. No afirmaría conocer los motivos del comité de idiomas sin el conocimiento de primera mano de los mismos. – jason

+0

@jason - tiene sentido aunque – asyncwait

+1

@Jason Para aclarar, este no es mi pensamiento, de hecho se nota en la especificación C#: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma -334.pdf (Página 363/Sección 19.7) "Al igual que el C++ estándar, C# permite una coma al final de un inicializador de matriz. Esta sintaxis proporciona flexibilidad para agregar o eliminar miembros de dicha lista, y simplifica la generación de máquinas de tales listas. " –

12

También (a la publicación de Nick Craver) es mucho más fácil agregar nuevas enumeraciones.

Este comportamiento apropiado no solo para enums. Considere lo siguiente:

var list = new int[] { 1, 2, 3, }; 
10

Otro motivo: hace que sea más fácil codificar gen.

1

Sé que es un tema antiguo pero, otro enfoque que tiene sentido para este problema es para los sistemas de control de versiones de código.

Consideremos el siguiente ejemplo:

//version 1 
var myArray = { 
    "item 1", 
    "item 2" 
}; 
//version 2 
var myArray = { 
    "item 1", 
    "item 2", //will be considered a change, it may be considered an erroneous approach 
    "item 3" 
} 

Consideremos ahora este enfoque:

//version 1 
var myArray = { 
    "item 1", 
    "item 2", 
}; 
//version 2 
var myArray = { 
    "item 1", 
    "item 2", //will not be considered a change, it may be considered an erroneous approach too, but, means that the code wasn't changed intrinsically 
    "item 3", 
}; 

Lo que sea, ambos enfoques pueden considerarse incorrecta o correcta dependiendo de la situación. Particularmente prefiero el segundo enfoque que tiene mucho más sentido cuando se trata de sistemas de versiones de código.

De todos modos espero que esto ayude.

Cuestiones relacionadas