Làm cách nào để tuỳ chỉnh lối tắt tạo trường riêng của Visual Studio cho các hàm tạo?


120

VS 2017 (và có thể là các phiên bản cũ hơn) cung cấp cho tôi phím tắt xây dựng nhỏ tiện dụng này để tạo một private readonlytrường và gán nó.

Ảnh chụp màn hình:

nhập mô tả hình ảnh ở đây

Điều này kết thúc tạo ra một thành viên riêng được gọi userServicevà sau đó chỉ định nó với:

this.userService = userService;

Điều này đi ngược lại với kiểu mã mà tôi sử dụng là đặt tên cho tất cả các thành viên riêng tư với một tiền tố _dẫn đến việc gán giống như sau:

_userService = userService;

Làm cách nào để VS tuân theo quy tắc kiểu mã này với các phím tắt tạo mã của nó?


Điều này không liên quan gì đến đoạn mã, tính năng này được cung cấp bởi dịch vụ phân tích mã. Có sẵn kể từ khi Roslyn được thêm vào. Dấu gạch dưới ở đầu là vi phạm Nguyên tắc lập trình .NET Framework, không có lý do gì mà bạn sẽ yêu cầu một lập trình viên của Microsoft thay đổi điều này. Đó là phong cách do Resharper thúc đẩy, họ không thích this.vì điều đó khiến lập trình viên không mua nó, hãy cân nhắc sử dụng nó.
Hans Passant

18
@HansPassant Mọi đoạn mã hiện đại mà tôi từng thấy do các nhóm tại Microsoft sản xuất đều tuân theo _camelCasequy ước dành cho các thành viên riêng tư này. Xem Hướng dẫn về kiểu mã hóa CoreFX C # , Kiểu mã hóa lõi ASP.NET và thậm chí cả mã Rosyln ... ??
kspearrin

5
@HansPassant Tin vui ... ai đó đã nói thành công một lập trình viên của Microsoft có thể thay đổi điều này. Xem câu trả lời bên dưới.
kspearrin

Bất kỳ ý tưởng nào về cách thực hiện điều này trong Visual Studio dành cho Mac?
Jason V

Câu trả lời:


229

Điều này cũng có thể đạt được trực tiếp trong Visual Studio. Chỉ cần đi đến Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. Trước tiên, bạn cần xác định kiểu đặt tên mới bằng cách nhấp vào nút "Quản lý kiểu đặt tên":

Hộp thoại kiểu đặt tên VS2017

  1. Sau đó, nhấp vào dấu + để xác định quy tắc mới cho "Trường riêng tư hoặc trường nội bộ", sử dụng kiểu đặt tên mới của bạn:

Hộp thoại Tùy chọn VS2017

  1. Khởi động lại Visual Studio

  2. Sau đó, khi bạn áp dụng tái cấu trúc "Tạo và khởi tạo trường", nó sẽ được đặt tên với dấu gạch dưới ở đầu.


Tôi đang sử dụng Visual Studio 15.8.8 và đây là câu trả lời duy nhất ở đây phù hợp với tôi.
Jonathan Taylor

25
FYI: Bạn có thể phải khởi động lại VS sau đó.
Jeff

9
Hoạt động tốt trong VS 2019.
Matt Stannett

3
Không phải tất cả các anh hùng mặc áo choàng. Lời giải thích tuyệt vời. Hoạt động tuyệt vời! Cám ơn.
datoml

1
Không cần khởi động lại trong VS 2019 Phiên bản 16.5.4
Douglas HM

32

Cài đặt .editorconfig là câu trả lời của kspearrin không hoạt động đối với tôi, tôi phải sử dụng các cài đặt này (cho VS2017 Phiên bả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 = _

Tôi nhận được những thứ này từ đây: https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444


Kỳ dị. Tôi hiện đang sử dụng VS 2017 15.6 và câu trả lời ban đầu của tôi dường như vẫn hoạt động ở đó. Ai biết được ...
kspearrin

Tôi đã cập nhật lên 15.6.3 và phiên bản này vẫn hoạt động với tôi. Tôi đang sử dụng phiên bản Cộng đồng, có thể bạn không?
michael_hook

Tôi cũng không thể làm việc, tôi đang sử dụng VS Pro 2017 phiên bản 15.6.4
Eric Schneider


Điều này làm việc cho tôi khi câu trả lời được chấp nhận thì không. VS Pro 15.7.5
Licht

24

Điều này có thể đạt được bằng cách tạo quy tắc đặt tên Trình phân tích mã Roslyn của riêng bạn. Thêm một .editorconfigtrong giải pháp của bạn để chỉ định các quy ước đặt tên tùy chỉnh.

Đọc thêm về chúng tại đây: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Để có được hiệu quả mong muốn từ câu hỏi, những điều sau sẽ hoạt động:

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

Kết quả:

nhập mô tả hình ảnh ở đây


Với tôi, đây có vẻ là chặng đường dài để hoàn thành nhiệm vụ này. Vui lòng xem phản hồi của @Maciek.
Eric

Đây là cách duy nhất trở lại khi tôi trả lời ban đầu. Có vẻ như họ đã thêm giao diện người dùng cho nó ngay bây giờ.
kspearrin

1
Chỉnh sửa .editorconfig là một giải pháp tốt hơn nhiều so với thực hiện qua giao diện người dùng.
gliljas

@Eric Đó là cách khác. Việc phải yêu cầu mọi thành viên trong nhóm của bạn định cấu hình VS của họ theo cách nhất định bằng tay chắc chắn lâu hơn, tẻ nhạt và dễ xảy ra lỗi hơn nhiều so với việc kiểm tra một .editorconfigtệp trong Git và biết rằng kể từ thời điểm đó, mọi người sẽ tự động điều chỉnh cài đặt của họ để làm theo phong cách mã hóa của dự án.
Daniel Liuzzi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.