Visual Studio 中如何定制快捷键来生成构造函数的私有字段 ?

VS 2017 (可能还有更老的版本) 中可以很方便的通过快捷键来生成 private readonly 字段并分配它。

截图:

enter image description here

这最终生成了一个名为userService的私有成员,然后将其赋值为:

this.userService = userService;

这违背了我使用的代码风格,即用前缀_命名所有私有成员,导致赋值应该如下所示:

_userService = userService;

我怎样才能让VS在它的代码生成快捷方式中遵守这个代码风格规则呢?

29861 次浏览

这可以通过创建自己的Roslyn代码分析器命名规则来实现。在解决方案中添加.editorconfig以指定自定义命名约定。

在这里阅读更多关于它们的信息:https://learn.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

为了从这个问题中得到想要的效果,下面的方法是有效的:

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

结果:

enter image description here

.editorconfig设置是kspearrin的答案,对我不起作用,我必须使用这些(VS2017版本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 = _

我从这里得到这些:https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444

这也可以直接在Visual Studio中实现。只要去Tools -> Options -> Text Editor -> C# -> Code Style -> Naming

  1. 首先,你需要通过点击“管理命名样式”按钮定义一个新的命名样式:

VS2017命名风格对话框

  1. 然后点击+号为“私有或内部字段”定义一个新规则,使用你的新命名风格:

VS2017 Options dialog

  1. 重启Visual Studio

  2. 在此之后,当应用“Create and initialize field”重构时,它将以前导下划线命名。