web-dev-qa-db-fra.com

Comment personnaliser le raccourci de génération de champ privé de Visual Studio pour les constructeurs?

VS 2017 (et peut-être des versions plus anciennes) me donne ce petit raccourci de constructeur très pratique pour générer un private readonly champ et attribuez-le.

Capture d'écran:

enter image description here

Ceci finit par générer un membre privé appelé userService et l'assigne ensuite avec:

this.userService = userService;

Cela va à l’encontre du style de code que j’utilise, qui consiste à nommer tous les membres privés avec un préfixe _ résultant en une affectation qui devrait ressembler à:

_userService = userService;

Comment puis-je faire en sorte que VS respecte cette règle de style de code avec ses raccourcis de génération de code?

82
kspearrin

Cela peut également être réalisé directement dans Visual Studio. Il suffit d'aller à Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

Tout d'abord, vous devez définir un nouveau style de nommage en cliquant sur le bouton "Gérer les styles de nommage":

VS2017 Naming style dialog

Cliquez ensuite sur le signe + pour définir une nouvelle règle pour "Champ privé ou interne", qui utilise votre nouveau style de dénomination:

VS2017 Options dialog

Après cela, lorsque vous appliquez le refactoring "Créer et initialiser le champ", il sera nommé avec un tiret bas.

119
Maciek

Les paramètres .editorconfig sont la réponse de kspearrin qui ne fonctionnait pas pour moi. Je devais les utiliser (pour VS2017 version 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 = _

Je les ai obtenues ici: https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444

24
michael_hook

Pour ce faire, créez votre propre règle de dénomination Roslyn Code Analyzer. Ajouter un .editorconfig dans votre solution pour spécifier des conventions de dénomination personnalisées.

En savoir plus sur eux ici: https://docs.Microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Pour obtenir l'effet souhaité de la question, voici ce qui fonctionnera:

[*.{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 = _

Résultat:

enter image description here

19
kspearrin