2009-10-23 23 views
5
  var cv = (new CustomValidator() 
      { 
       ErrorMessage="Formato de telefone inválido", 
       ControlToValidate = "txtTelefoneIni", //<-- see the extra comma 
      }); 
+0

es legal, cv se convierte en un nuevo CustomValidator. Los campos de CV se inicializan explícitamente en lugar de pasar los parámetros a través del constructor. – Maciek

Respuesta

12

Porque es la sintaxis legal.

Realmente, lo es.

Cuando está construyendo un objeto utilizando la sintaxis del inicializador de objetos, puede dejar una coma final después del último elemento, incluso si finaliza el bloque de inicializador en ese momento.

La razón detrás de esto es probablemente que hace que sea más fácil regresar y editarlo más tarde, ya que se olvida agregar una coma después de que el último elemento anterior es el problema de tiempo de compilación # 1 con objetos-inicializadores.

+1

He oído que se dejó legal para el beneficio de las personas que escriben generadores de código. ¿Quién sabe? Parece un poco descuidado para mí. – Will

+1

También es bueno desde el punto de vista del control de versiones: puede agregar otra entrada sin modificar ninguna línea, por lo que la diferencia es más clara. – Cascabel

+0

Tengo dos mentes en esto para ser honesto. Personalmente, no agrego esas comas, las agrego cuando las necesito, pero también veo el punto acerca de los generadores de códigos, que también uso, por lo que no es una solución perfecta de ninguna manera. De todos modos, está aquí para quedarse. –

2

Es intencional. También funciona en miembros enum. (por lo que es más fácil agregar más cosas)

2

¿Por qué no debería compilarse?

Este tipo de sintaxis es legal en Python también.

+0

Lo pensé porque SQL ANSI y JScript no nos permiten hacer tal cosa. – Cleiton

+0

IE no permite comas finales en JavaScript ha sido la fuente de muchos pequeños errores para nosotros.Aunque no es tanto que IE no lo permita, simplemente agrega un elemento 'undefined' al final de una matriz. – JulianR

+0

SQL y JScript son otros idiomas, y no son C# 3.0 o Python. – yfeldblum

2

Se compila porque es una sintaxis válida de C#. También puede hacer lo mismo con las matrices

cadena [] meh = {"a", "b", "c",};

1

Porque está permitido. Generalmente, permitir la coma final en dichos formularios (y usar ese "privilegio") es útil para que los programadores puedan agregar más elementos a la lista sin el riesgo de haber olvidado agregar una coma al final del artículo anterior.

1

Es una sintaxis válida en C#

permite ver

var c = new List<int>() { 1, 2, 3 ,}; 
1

Fwiw, ya era válido en C.

Mi razón favorito para utilizar una sintaxis tal (especialmente cuando se definen las enumeraciones) es que cuando se agrega un elemento a la lista, el control de la fuente ve cambios en una línea solo (el nuevo). No etiqueta el anterior como modificado (debido a la coma añadida). Diff mucho más legible

Mis 2 centavos.

Cuestiones relacionadas