2013-10-02 16 views
7

Sto utilizzando il provider SimpleMembership e aggiungo campi aggiuntivi da salvare durante la registrazione.Nome di proprietà esplicito ridondante in avviso C#

Per salvare campi aggiuntivi durante la registrazione, utilizzo il metodo utilizzato ovunque, ad es. Link

Io uso il seguente metodo fornitore SimpleMembership chiamato nel mio HttpPost ActionResult metodo

WebSecurity.CreateUserAndAccount(registerModel.UserName, registerModel.Password, 
    new { FirstName = registerModel.FirstName, LastName = registerModel.LastName, CompanyName = registerModel.CompanyName}); 

campi aggiuntivi vengono aggiunti da una con il metodo del valore di parametro di tipo di oggetto Registrati. la descrizione per questo è "Un dizionario che contiene attributi utente aggiuntivi"

Quindi questo funziona.

La mia domanda è che ho installato Jetbrains Resharper 8 e per i nomi delle proprietà viene visualizzato il messaggio di avviso "nome proprietà ridondante esplicito". Per rimuovere gli avvertimenti che posso cambiare il mio codice sarà simile:

WebSecurity.CreateUserAndAccount(registerModel.UserName, registerModel.Password, 
    new { registerModel.FirstName, registerModel.LastName, registerModel.CompanyName}); 

La mia domanda sono 1) per questo parametro oggetto anonimo dove ora rimuovere i nomi di proprietà in modo da non ottengo più gli avvertimenti ReSharper, come fa a sapere quali nomi di proprietà saranno utilizzati per corrispondere alla classe di proprietà db poiché vengono passati per valore?

2) qual è la pratica migliore con i nomi delle proprietà o meno. Non averli letti non è molto leggibile e nei campioni di codice sono specificati, quindi immagino di averli inseriti è meglio leggibilità invece di rimuoverli

risposta

10

La mia domanda sono 1) per questo parametro oggetto anonimo dove ora rimuovo i nomi delle proprietà quindi non ottengo più gli avvisi Resharper, come fa a sapere quali sono i nomi delle proprietà poiché vengono passati per valore?

I nomi sono dedotti (dal compilatore) dalle espressioni. Funziona solo quando stai usando un campo o una proprietà (non un letterale o un metodo per esempio). Questo è nella sezione 7.6.10 delle specifiche del linguaggio C#.

2) qual è la pratica migliore con i nomi di proprietà o meno. Averli non in non è molto leggibile e in esempi di codice sono specificati quindi immagino averli in è meglio piuttosto che rimuoverlo

Se è più leggibile per voi e il vostro team per includere sempre il nome, quindi vai avanti e fallo. Per altre persone, potrebbe sembrare un po 'ridondante. Basta regolare le impostazioni R # per adattarle alle convenzioni locali.

L'argomento che "negli esempi di codice sono specificati" è specioso - ci sono alcuni esempi in cui sono specificati e altri in cui non lo sono. Sospetto che troverai una miscela anche all'interno di provider di esempi particolari (ad esempio in MSDN).

2

Quando si imposta l'oggetto propertyNames che si sta creando un'istanza di tipo anonimo, quando si esegue questa operazione è possibile omettere il nome della proprietà se è uguale alla proprietà da cui si assegna il valore. Ecco perché ReSharper dice che i nomi sono ridondanti.

Dichiarare esplicitamente i nomi di proprietà quando non è necessario è una preferenza personale; una volta che hai familiarità con la convenzione di cui sopra, non penso che nuoccia la leggibilità.

0
  • come fa a sapere quali sono i nomi delle proprietà saranno utilizzati per corrispondere alla classe di proprietà db dal momento che sono passati per valore

In nutshel tipi anonimi vengono creati compilare il tempo. Quindi il compilatore risolve i nomi delle proprietà usando espressioni passate e nel risultato abbiamo una classe anonima con proprietà readonly dichiarate. Puoi controllare il tuo IL per vedere che l'assembly contiene questo tipo e le proprietà sono impostate in modo esplicito.

  • ciò che è meglio la pratica avendo i nomi di proprietà in o non

Dipende da ogni persona. Vorrei raccomandare di scegliere un modo unico per la tua squadra e utilizzare le stesse impostazioni di Resharper su ogni macchina DEV.

Problemi correlati