Come si personalizza il collegamento alla generazione di campi privati ​​di Visual Studio per i costruttori?


120

VS 2017 (e forse le versioni più vecchie) mi offre questa pratica scorciatoia per il costruttore per generare un private readonlycampo e assegnarlo.

Immagine dello schermo:

inserisci qui la descrizione dell'immagine

Questo finisce per generare un membro privato chiamato userServicee quindi lo assegna con:

this.userService = userService;

Questo va contro lo stile di codice che uso che è quello di nominare tutti i membri privati ​​con un prefisso _risultante in un'assegnazione che dovrebbe assomigliare a:

_userService = userService;

Come posso fare in modo che VS obbedisca a questa regola di stile del codice con le sue scorciatoie per la generazione del codice?


Questo non ha nulla a che fare con gli snippet, questa funzione è fornita dal servizio di analisi del codice. Disponibile da quando è stato aggiunto Roslyn. Un carattere di sottolineatura iniziale è una violazione delle Linee guida di programmazione .NET Framework, non è assolutamente possibile convincere un programmatore Microsoft a modificarlo. È uno stile spinto da Resharper, a loro non piace this.perché questo fa sì che il programmatore non lo acquisti, considera di usarlo.
Hans Passant

18
@HansPassant Ogni pezzo di codice moderno che ho visto prodotto dai team di Microsoft segue questa _camelCaseconvenzione per i membri privati. Vedere la CoreFX C # codifica linee guida di stile , ASP.NET Nucleo di codifica stile e anche il codice Rosyln sé ... ??
kspearrin

5
@HansPassant Buone notizie ... qualcuno è riuscito a convincere un programmatore Microsoft a cambiare questa situazione. Vedi la risposta sotto.
kspearrin

Qualche idea su come farlo in Visual Studio per Mac?
Jason V

Risposte:


229

Ciò può essere ottenuto anche direttamente in Visual Studio. Vai a Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. Innanzitutto è necessario definire un nuovo stile di denominazione facendo clic sul pulsante "Gestisci stili di denominazione":

Finestra di dialogo Stile di denominazione VS2017

  1. Quindi fai clic sul segno + per definire una nuova regola per "Campo privato o interno", che utilizza il tuo nuovo stile di denominazione:

Finestra di dialogo Opzioni VS2017

  1. Riavvia Visual Studio

  2. Dopodiché, quando si applica il refactoring "Crea e inizializza campo", verrà denominato con un trattino basso iniziale.


Sono su Visual Studio 15.8.8 e questa è stata l'unica risposta qui che ha funzionato per me.
Jonathan Taylor

25
FYI: Potrebbe essere necessario riavviare VS dopo questo.
Jeff

9
Funziona bene in VS 2019.
Matt Stannett,

3
Non tutti gli eroi indossano mantelli. Ottima spiegazione. Funziona alla grande! Grazie.
datoml

1
Nessun riavvio richiesto in VS 2019 versione 16.5.4
Douglas HM

32

Le impostazioni .editorconfig sono che la risposta di kspearrin non ha funzionato per me, ho dovuto usarle (per VS2017 versione 15.4.0):

[*.{cs,vb}]
dotnet_naming_rule.private_members_with_underscore.symbols  = private_fields
dotnet_naming_rule.private_members_with_underscore.style    = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion

dotnet_naming_symbols.private_fields.applicable_kinds           = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private

dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _

Li ho presi da qui: https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444


Strano. Ora sto usando VS 2017 15.6 e la mia risposta originale sembra ancora funzionare lì. Chissà ...
kspearrin

Ho aggiornato alla 15.6.3 e questa versione funziona ancora per me. Sto usando la Community Edition, forse non lo sei?
michael_hook

Non riesco a far funzionare nessuno dei due, sto usando VS Pro 2017 versione 15.6.4
Eric Schneider


Questo ha funzionato per me quando la risposta accettata non ha funzionato. VS Pro 15.7.5
Licht

24

Ciò può essere ottenuto creando la propria regola di denominazione di Roslyn Code Analyzer. Aggiungi un .editorconfignella tua soluzione per specificare convenzioni di denominazione personalizzate.

Maggiori informazioni su di loro qui: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Per ottenere l'effetto desiderato dalla domanda, funzionerà quanto segue:

[*.{cs,vb}]
dotnet_naming_rule.private_members_with_underscore.symbols  = private_fields
dotnet_naming_rule.private_members_with_underscore.style    = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion

dotnet_naming_symbols.private_fields.applicable_kinds           = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_fields.required_modifiers         = readonly

dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _

Risultato:

inserisci qui la descrizione dell'immagine


Mi sembra che questa sia la strada più lunga per portare a termine questo compito. Si prega di vedere la risposta di @Maciek.
Eric,

Questo era l'unico modo per tornare indietro quando inizialmente ho risposto. Sembra che ora abbiano aggiunto un'interfaccia utente.
kspearrin

1
La modifica di .editorconfig è una soluzione molto più interessante che farlo tramite l'interfaccia utente.
gliljas,

@ Eric È il contrario. Dover dire a ogni membro del tuo team di configurare manualmente il proprio VS in un certo modo è sicuramente molto più lungo, noioso e soggetto a errori rispetto al check-in di un .editorconfigfile in Git e sapere che da quel momento in poi tutti avranno le loro impostazioni automaticamente regolate per seguire lo stile di codifica del progetto.
Daniel Liuzzi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.