¿Cómo personalizo el acceso directo de generación de campos privados de Visual Studio para constructores?

Resuelto kspearrin asked hace 7 años • 4 respuestas

VS 2017 (y tal vez versiones anteriores) me brinda este pequeño y práctico atajo de constructor para generar un private readonlycampo y asignarlo.

Captura de pantalla:

ingrese la descripción de la imagen aquí

Esto termina generando un miembro privado llamado userServicey luego le asigna:

this.userService = userService;

Esto va en contra del estilo de código que uso, que consiste en nombrar a todos los miembros privados con un prefijo, lo que _da como resultado una asignación que debería verse así:

_userService = userService;

¿Cómo puedo hacer para que VS obedezca esta regla de estilo de código con sus atajos de generación de código?

kspearrin avatar Aug 17 '17 20:08 kspearrin
Aceptado

Esto también se puede lograr directamente en Visual Studio. Sólo ve a Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. En primer lugar, debe definir un nuevo estilo de nombre haciendo clic en el botón "Administrar estilos de nombre":

Cuadro de diálogo de estilo de nomenclatura VS2017

  1. Luego haga clic en el signo + para definir una nueva regla para "Campo privado o interno", que utilice su nuevo estilo de nomenclatura:

Cuadro de diálogo Opciones de VS2017

  1. Reiniciar Visual Studio

  2. Después de eso, cuando aplique la refactorización "Crear e inicializar campo", se nombrará con un guión bajo inicial.

Maciek avatar Oct 02 '2018 07:10 Maciek

La configuración de .editorconfig es la respuesta de kspearrin no funcionó para mí. Tuve que usar estas (para VS2017 Versión 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 = _

Los obtuve de aquí: https://github.com/dotnet/roslyn/issues/22884#issuecomment -358776444

michael_hook avatar Mar 22 '2018 12:03 michael_hook

Esto se puede lograr creando su propia regla de nomenclatura de Roslyn Code Analyzer. Agregue un .editorconfigen su solución para especificar convenciones de nomenclatura personalizadas.

Lea más sobre ellos aquí: https://learn.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Para obtener el efecto deseado de la pregunta, lo siguiente funcionará:

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

Resultado:

ingrese la descripción de la imagen aquí

kspearrin avatar Aug 23 '2017 17:08 kspearrin

Leí las soluciones anteriores y por mucho que parezcan correctas, la única forma de hacer que la configuración funcione correctamente en VS2022 es ordenar correctamente las entradas .editorconfig, de la siguiente manera:

# Use underscores for private fields
[*.{cs,vb}]
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 = _

dotnet_naming_rule.private_fields_with_underscore.symbols  = private_fields
dotnet_naming_rule.private_fields_with_underscore.style    = prefix_underscore
dotnet_naming_rule.private_fields_with_underscore.severity = warning
aleksander_si avatar Jan 18 '2023 10:01 aleksander_si