ฉันจะปรับแต่งช็อตคัทการสร้างฟิลด์ส่วนตัวของ Visual Studio สำหรับคอนสตรัคเตอร์ได้อย่างไร


120

VS 2017 (และอาจจะเป็นเวอร์ชันเก่า) ให้ทางลัดตัวสร้างที่มีประโยชน์นี้แก่ฉันในการสร้างprivate readonlyฟิลด์และกำหนด

ภาพหน้าจอ:

ใส่คำอธิบายภาพที่นี่

สิ่งนี้จะจบลงด้วยการสร้างสมาชิกส่วนตัวที่เรียกว่าuserServiceแล้วกำหนดด้วย:

this.userService = userService;

สิ่งนี้ขัดกับรูปแบบรหัสที่ฉันใช้ซึ่งคือการตั้งชื่อสมาชิกส่วนตัวทั้งหมดด้วยคำนำหน้า_ซึ่งทำให้ได้รับมอบหมายที่ควรมีลักษณะดังนี้:

_userService = userService;

ฉันจะทำให้ VS เป็นไปตามกฎสไตล์โค้ดนี้ด้วยทางลัดการสร้างโค้ดได้อย่างไร


สิ่งนี้ไม่มีส่วนเกี่ยวข้องกับตัวอย่างคุณลักษณะนี้มีให้โดยบริการวิเคราะห์โค้ด ใช้ได้ตั้งแต่เพิ่ม Roslyn ขีดล่างนำหน้าเป็นการละเมิดแนวทางการเขียนโปรแกรม. NET Framework ไม่ว่าคุณจะพูดคุยกับโปรแกรมเมอร์ของ Microsoft เกี่ยวกับการเปลี่ยนแปลงสิ่งนี้ มันเป็นสไตล์ที่ถูกผลักดันโดย Resharper พวกเขาไม่ชอบthis.เพราะนั่นทำให้โปรแกรมเมอร์ไม่ซื้อมันให้พิจารณาใช้มัน
Hans Passant

18
@HansPassant โค้ดสมัยใหม่ทุกชิ้นที่ฉันได้เห็นผลิตโดยทีมงานที่ Microsoft ทำตาม_camelCaseอนุสัญญานี้สำหรับสมาชิกส่วนตัว ดูCoreFX C # Coding Style Guidelines , ASP.NET Core Coding Styleและแม้แต่Rosyln code เอง ... ??
kspearrin

5
@HansPassant ข่าวดี ... มีคนคุยกับโปรแกรมเมอร์ไมโครซอฟต์ได้สำเร็จว่าสามารถเปลี่ยนแปลงสิ่งนี้ได้ ดูคำตอบด้านล่าง
kspearrin

มีความคิดอย่างไรใน Visual Studio for Macs?
Jason V

คำตอบ:


231

สิ่งนี้สามารถทำได้โดยตรงใน Visual Studio Tools -> Options -> Text Editor -> C# -> Code Style -> Namingเพียงแค่ไปที่

  1. อันดับแรกคุณต้องกำหนดรูปแบบการตั้งชื่อใหม่โดยคลิกปุ่ม "จัดการรูปแบบการตั้งชื่อ":

VS2017 ไดอะล็อกสไตล์การตั้งชื่อ

  1. จากนั้นคลิกเครื่องหมาย + เพื่อกำหนดกฎใหม่สำหรับ "ฟิลด์ส่วนตัวหรือฟิลด์ภายใน" ซึ่งใช้รูปแบบการตั้งชื่อใหม่ของคุณ:

กล่องโต้ตอบตัวเลือก VS2017

  1. รีสตาร์ท Visual Studio

  2. หลังจากนั้นเมื่อคุณใช้การรีแฟคเตอร์ "สร้างและเริ่มต้นฟิลด์" ระบบจะตั้งชื่อด้วยเครื่องหมายขีดล่าง


ฉันใช้ Visual Studio 15.8.8 และนี่เป็นคำตอบเดียวที่เหมาะกับฉัน
Jonathan Taylor

25
FYI: คุณอาจต้องรีสตาร์ท VS หลังจากนี้
เจฟฟ์

9
ทำงานได้ดีใน VS 2019
Matt Stannett

3
ไม่ใช่ฮีโร่ทุกคนที่สวมเสื้อคลุม คำอธิบายที่ยอดเยี่ยม ใช้งานได้ดี! ขอบคุณ.
datoml

1
ไม่จำเป็นต้องรีสตาร์ทใน VS 2019 เวอร์ชัน 16.5.4
ดักลาส 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 และเวอร์ชันนี้ยังใช้งานได้สำหรับฉัน ฉันกำลังใช้ Community edition อยู่อาจจะไม่ใช่?
michael_hook

ฉันไม่สามารถทำงานได้ฉันใช้ VS Pro 2017 เวอร์ชัน 15.6.4
Eric Schneider


อันนี้ใช้ได้ผลสำหรับฉันเมื่อคำตอบที่ยอมรับไม่ได้ VS Pro 15.7.5
Licht

24

สามารถทำได้โดยสร้างกฎการตั้งชื่อ Roslyn Code Analyzer ของคุณเอง เพิ่ม.editorconfigในโซลูชันของคุณเพื่อระบุหลักการตั้งชื่อที่กำหนดเอง

อ่านเพิ่มเติมได้ที่นี่: https://docs.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 = _

ผลลัพธ์:

ใส่คำอธิบายภาพที่นี่


สำหรับฉันนี่ดูเหมือนว่าจะเป็นหนทางที่ยาวนานในการทำงานนี้ให้สำเร็จ โปรดดูการตอบกลับของ @Maciek
Eric

นี่เป็นวิธีเดียวที่ย้อนกลับไปเมื่อฉันตอบครั้งแรก ดูเหมือนว่าตอนนี้พวกเขาได้เพิ่ม UI แล้ว
kspearrin

1
การแก้ไข. editorconfig เป็นวิธีแก้ปัญหาที่ดีกว่าการทำผ่าน UI
gliljas

@ เอริกมันเป็นอีกทางหนึ่ง การบอกสมาชิกทุกคนในทีมของคุณให้กำหนดค่า VS ด้วยตนเองนั้นยาวกว่าน่าเบื่อและเกิดข้อผิดพลาดได้ง่ายกว่าการตรวจสอบ.editorconfigไฟล์ใน Git และรู้ว่าจากช่วงเวลานั้นทุกคนจะมีการปรับการตั้งค่าโดยอัตโนมัติให้ปฏิบัติตาม รูปแบบการเข้ารหัสของโครงการ
Daniel Liuzzi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.