var cv = (new CustomValidator()
{
ErrorMessage="Formato de telefone inválido",
ControlToValidate = "txtTelefoneIni", //<-- see the extra comma
});
risposta
Perché è una sintassi legale.
Davvero, lo è.
Quando si costruisce un oggetto utilizzando la sintassi di inizializzazione dell'oggetto, è possibile lasciare una virgola finale dopo l'ultimo elemento, anche se si termina il blocco di inizializzazione lì e poi.
Il motivo dietro di esso è probabilmente che rende più facile tornare indietro e modificarlo in seguito, come dimenticare di aggiungere una virgola dopo che l'ultimo oggetto in precedenza è il problema di compilazione # 1 con gli inizializzatori di oggetti.
Ho sentito dire che è stato lasciato legale per il beneficio delle persone che scrivono generatori di codice. Chissà? Sembra piuttosto sciatto per me. – Will
È anche bello dal punto di vista del controllo della versione: è possibile aggiungere un'altra voce senza modificare alcuna riga, quindi il diff è più pulito. – Cascabel
Sono sincero su questo. Personalmente non aggiungo queste virgole, le aggiungo quando ne ho bisogno, ma vedo anche il punto sui generatori di codice, che uso anch'io, quindi non è una soluzione perfetta in entrambi i casi. Comunque, è qui per restare. –
È intenzionale. Funziona anche con i membri di enum. (quindi è più facile aggiungere altre cose)
Perché non dovrebbe essere compilato?
Questo tipo di sintassi è legale anche in Python.
L'ho pensato perché SQL ANSI e JScript non ci permettono di fare questa cosa. – Cleiton
IE non consente di inserire virgole finali in JavaScript è stata la fonte di molti piccoli bug per noi.Sebbene non sia così tanto che IE non lo consente, aggiunge semplicemente un elemento 'undefined' alla fine di un array. – JulianR
SQL e JScript sono altri linguaggi e non sono C# 3.0 o Python. – yfeldblum
Si compila perché è una sintassi C# valida. Puoi anche fare la stessa cosa con gli array
string [] meh = {"a", "b", "c",};
Perché è consentito. In genere, è possibile utilizzare la virgola finale in tali forme (e utilizzare effettivamente tale "privilegio") in modo che i programmatori possano aggiungere altri elementi all'elenco senza il rischio di aver dimenticato di aggiungere la virgola alla fine dell'elemento precedente.
sua una sintassi valida in C#
Vediamo
var c = new List<int>() { 1, 2, 3 ,};
Fa parte dei C# language specification: inizializzatori oggetto.
FWIW, era già valido C.
La mia ragione preferito utilizzare tale sintassi (in particolare al momento di definire le enumerazioni) è che quando si aggiunge un elemento alla lista, il controllo del codice sorgente vede cambiamenti in una sola riga solo (il nuovo). Non contrassegna quello precedente come modificato (a causa della virgola aggiunta). Dif molto più leggibile
I miei 2 centesimi.
- 1. A() = A() - perché viene compilato?
- 2. Perché questo enum viene compilato?
- 3. Perché questo codice C viene compilato?
- 4. Perché questo codice Haskell viene compilato?
- 5. Perché {$ ifopt FINITEFLOAT ON} non viene compilato?
- 6. Perché un delegato senza parametri viene compilato?
- 7. java.lang.Object o = 1; // perché viene compilato?
- 8. Perché il codice non viene compilato?
- 9. Perché questo codice C# non viene compilato?
- 10. Perché questo programma equivalente non viene compilato?
- 11. Uso strano di const: perché viene compilato?
- 12. Come viene compilato l'aspx?
- 13. Perché questo codice non viene compilato in g ++
- 14. Perché `++ a ++` non viene compilato in C++ ma `(++ a) ++` fa?
- 15. Perché questo codice C++ viene compilato? Che cosa fa?
- 16. Perché questo codice Java generico non viene compilato?
- 17. Funzionalità o errore: perché viene compilato questo codice Java?
- 18. Perché viene compilato il codice con punti e virgola successivi?
- 19. Perché questo programma C viene compilato senza errori?
- 20. instanceof in Java - perché questo non viene compilato?
- 21. Perché il codice .NET viene compilato su MSIL?
- 22. Perché il seguente codice viene compilato con MSVC++?
- 23. Perché il seguente codice viene compilato senza errori?
- 24. Perché questo codice generico viene compilato in java 8?
- 25. Perché e come viene compilato questo codice Java?
- 26. Perché RegexOptions viene compilato su RegexOptions.None in MSIL?
- 27. Riferimento alla variabile non finale: perché questo codice viene compilato?
- 28. TwitterKit non viene compilato con Xcode 6.3
- 29. non viene compilato. Non riconosce "static function_entry"
- 30. Java 8 flatMap + Optional.of non viene compilato
è legale, cv diventa un nuovo CustomValidator. I campi del CV sono inizializzati esplicitamente invece di passare i parametri tramite il costruttore. – Maciek