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

è legale, cv diventa un nuovo CustomValidator. I campi del CV sono inizializzati esplicitamente invece di passare i parametri tramite il costruttore. – Maciek

risposta

12

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.

+1

Ho sentito dire che è stato lasciato legale per il beneficio delle persone che scrivono generatori di codice. Chissà? Sembra piuttosto sciatto per me. – Will

+1

È 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

+0

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. –

2

È intenzionale. Funziona anche con i membri di enum. (quindi è più facile aggiungere altre cose)

2

Perché non dovrebbe essere compilato?

Questo tipo di sintassi è legale anche in Python.

+0

L'ho pensato perché SQL ANSI e JScript non ci permettono di fare questa cosa. – Cleiton

+0

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

+0

SQL e JScript sono altri linguaggi e non sono C# 3.0 o Python. – yfeldblum

2

Si compila perché è una sintassi C# valida. Puoi anche fare la stessa cosa con gli array

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

1

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.

1

sua una sintassi valida in C#

Vediamo

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

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.

Problemi correlati