如何为构造函数自定义Visual Studio的私有字段生成快捷方式?


120

VS 2017(也许是较旧的版本)为我提供了这个方便的小构造函数快捷方式,用于生成private readonly字段并为其分配值。

屏幕截图:

在此处输入图片说明

最后生成一个私有成员userService,然后将其分配给:

this.userService = userService;

这违背了我使用的代码样式,该样式使用前缀来命名所有私有成员,_从而导致分配看起来像这样:

_userService = userService;

如何使VS通过其代码生成快捷方式遵循此代码样式规则?


这与代码片段无关,此功能由代码分析服务提供。自添加Roslyn以来可用。突出的下划线是对.NET Framework编程指南的违反,您绝不能说服Microsoft程序员来更改它。这是Resharper推崇的一种风格,他们不喜欢,this.因为这会使程序员不购买它,可以考虑使用它。
汉斯·帕桑

18
@HansPassant 我在Microsoft的团队中看到的每一个现代代码都遵循此_camelCase私有成员的约定。请参阅CoreFX C#编码样式指南ASP.NET核心编码样式,甚至Rosyln代码本身 ...?
kspearrin

5
@HansPassant好消息...某人成功地说服了Microsoft程序员能够更改此设置。请参阅下面的答案。
kspearrin

任何想法如何在Mac的Visual Studio中执行此操作?
詹森五世

Answers:


229

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

  1. 首先,您需要通过单击“管理命名样式”按钮来定义新的命名样式:

VS2017命名样式对话框

  1. 然后单击+号为“私有或内部字段”定义一个新规则,该规则使用您的新命名方式:

VS2017选项对话框

  1. 重新启动Visual Studio

  2. 此后,当您应用“创建并初始化字段”重构时,它将以前导下划线命名。


我使用的是Visual Studio 15.8.8,这是唯一对我有用的答案。
乔纳森·泰勒

25
仅供参考:此后,您可能必须重新启动VS。
杰夫

9
在2019年VS行之有效
马特Stannett

3
不是所有的英雄穿着斗篷。很好的解释。很棒!谢谢。
datoml

1
VS 2019版本16.5.4中不需要重新启动
Douglas HM

32

.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


奇怪的。我现在正在使用VS 2017 15.6,我的原始答案似乎在那里仍然有效。谁知道...
kspearrin

我更新到15.6.3,该版本的图片仍然对我有用。我正在使用社区版,也许您没有?
michael_hook

我无法工作,我正在使用VS Pro 2017 15.6.4版
Eric Sc​​hneider


当接受的答案不可行时,这对我有用。VS Pro 15.7.5
利希特(Licht)

24

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

在此处阅读有关它们的更多信息:https : //docs.microsoft.com/zh-cn/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 = _

结果:

在此处输入图片说明


在我看来,这是完成这项任务的漫长道路。请参阅@Maciek的回复。
埃里克

这是我最初回答时的唯一途径。看起来他们现在为其添加了一个UI。
kspearrin

1
与通过UI进行编辑相比,编辑.editorconfig是更好的解决方案。
gliljas

@Eric相反。与在Git中检入文件并知道从那时起每个人都将自动调整其设置之后相比,必须告诉团队中的每个成员以某种方式手动配置VS 肯定要花费更长的时间,繁琐且容易出错。项目的编码风格。.editorconfig
Daniel Liuzzi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.