var cv = (new CustomValidator()
{
ErrorMessage="Formato de telefone inválido",
ControlToValidate = "txtTelefoneIni", //<-- see the extra comma
});
Respuesta
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.
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
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
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. –
Es intencional. También funciona en miembros enum. (por lo que es más fácil agregar más cosas)
¿Por qué no debería compilarse?
Este tipo de sintaxis es legal en Python también.
Lo pensé porque SQL ANSI y JScript no nos permiten hacer tal cosa. – Cleiton
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
SQL y JScript son otros idiomas, y no son C# 3.0 o Python. – yfeldblum
Se compila porque es una sintaxis válida de C#. También puede hacer lo mismo con las matrices
cadena [] meh = {"a", "b", "c",};
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.
Es una sintaxis válida en C#
permite ver
var c = new List<int>() { 1, 2, 3 ,};
Es parte de los C# language specification: inicializadores de objeto.
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.
- 1. ¿Por qué compila esto?
- 2. ¿Por qué compila erlang: foo()?
- 3. ¿Por qué/cómo se compila?
- 4. ¿Por qué int main() {} compila?
- 5. ¿Por qué no compila {$ ifopt FINITEFLOAT ON}?
- 6. ¿Por qué compila esta consulta LINQ?
- 7. ¿Por qué compila este fragmento de código?
- 8. java.lang.Object o = 1; // ¿por qué compila esto?
- 9. ¿Por qué vector.push_back (auto_ptr) no compila?
- 10. ¿Por qué compila este código C?
- 11. ¿Por qué un delegado sin parámetros compila?
- 12. ¿Por qué compila esto en Ideone?
- 13. ¿Por qué compila este código Haskell?
- 14. "loop:" en código Java. ¿Qué es esto? ¿Por qué compila?
- 15. ¿Por qué compila esta declaración de clase C#?
- 16. Característica o error: ¿Por qué compila este código de Java?
- 17. ¿Por qué mi programa de división de C++ no compila
- 18. ¿Por qué Perl no compila en archivos binarios como python?
- 19. ¿Por qué no se compila este código de plantilla C++?
- 20. ¿Por qué compila C# mucho más rápido que C++?
- 21. ¿Por qué Eclipse compila esto, pero javac no?
- 22. ¿Por qué este código C# no se compila?
- 23. ¿Por qué este programa C se compila sin un error?
- 24. Rails compila activos con y sin md5 hash, ¿por qué?
- 25. ¿Por qué este código no se compila en g ++
- 26. ¿Por qué el código .NET se compila en MSIL?
- 27. ¿Por qué compila el siguiente código con MSVC++?
- 28. ¿Por qué ptr_fun (tolower) no se compila en mingw?
- 29. Haskell: ¿Por qué no hay desajuste de tipo (y por qué compila esto)?
- 30. ¿Importa con qué JDK del proveedor compila?
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