Timetombs

泛义的工具是文明的基础,而确指的工具却是愚人的器物

66h / 116a
,更新于 2024-04-06T22:06:23Z+08:00 by   35f4f88

[代码规范] C#规范指南

版权声明 - CC BY-NC-SA 4.0

1 代码规范

代码风格配置文件 :

# http://editorconfig.org

# VS 2017 : 15.6+ 内置支持;Tools > Options > Text Editor > "Follow project coding conventions"
# VS Code : (Ctrl+E) ext install editorconfig

root = true

[*]
charset                  = utf-8
end_of_line              = lf
indent_size              = 2
indent_style             = space
insert_final_newline     = true
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.cs]
end_of_line              = crlf
indent_size              = 4

[*.cake]
end_of_line              = crlf
indent_size              = 4

[*.cshtml]
end_of_line              = crlf
indent_size              = 4

[*.xaml]
end_of_line              = crlf
indent_size              = 4

[*.bat]
end_of_line              = crlf
indent_size              = 4

[*.cmd]
end_of_line              = crlf
indent_size              = 4

[*.ps1]
end_of_line              = crlf
indent_size              = 4

[*.csproj]
end_of_line              = crlf

[*.sln]
end_of_line              = crlf

# C# 命名规则
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-naming-conventions
[*.cs]
## 接口示例:IPascalCase
dotnet_naming_rule.interface_rule.symbols                                 = interface_symbol
dotnet_naming_rule.interface_rule.style                                   = interface_style
dotnet_naming_rule.interface_rule.severity                                = error
dotnet_naming_symbols.interface_symbol.applicable_kinds                   = interface
dotnet_naming_style.interface_style.required_prefix                       = I
dotnet_naming_style.interface_style.capitalization                        = pascal_case

## 类,结构,枚举,委托,方法,属性,事件示例: PascalCase
dotnet_naming_rule.pascal_case_rule.symbols                               = pascal_case_symbol
dotnet_naming_rule.pascal_case_rule.style                                 = pascal_case_style
dotnet_naming_rule.pascal_case_rule.severity                              = error
dotnet_naming_symbols.pascal_case_symbol.applicable_kinds                 = class,struct,enum,delegate,method,property,event
dotnet_naming_style.pascal_case_style.capitalization                      = pascal_case

## 私有字段示例: _camelCase
dotnet_naming_rule.private_field_rule.symbols                             = private_field_symbol
dotnet_naming_rule.private_field_rule.style                               = private_field_style
dotnet_naming_rule.private_field_rule.severity                            = error
dotnet_naming_symbols.private_field_symbol.applicable_kinds               = field
dotnet_naming_symbols.private_field_symbol.applicable_accessibilities     = private
dotnet_naming_style.private_field_style.required_prefix                   = _
dotnet_naming_style.private_field_style.capitalization                    = camel_case

## 非私有字段示例: PascalCase
dotnet_naming_rule.non_private_field_rule.symbols                         = non_private_field_symbol
dotnet_naming_rule.non_private_field_rule.style                           = non_private_field_style
dotnet_naming_rule.non_private_field_rule.severity                        = error
dotnet_naming_symbols.non_private_field_symbol.applicable_kinds           = field
dotnet_naming_symbols.non_private_field_symbol.applicable_accessibilities = public,internal,protected,protected_internal
dotnet_naming_style.non_private_field_style.capitalization                = pascal_case

## 参数示例: camelCase
dotnet_naming_rule.parameter_rule.symbols                                 = parameter_symbol
dotnet_naming_rule.parameter_rule.style                                   = parameter_style
dotnet_naming_rule.parameter_rule.severity                                = error
dotnet_naming_symbols.parameter_symbol.applicable_kinds                   = parameter
dotnet_naming_style.parameter_style.capitalization                        = camel_case

## 常量示例: ALL_UPPER
dotnet_naming_rule.const_rule.symbols                                     = const_symbol
dotnet_naming_rule.const_rule.style                                       = const_style
dotnet_naming_rule.const_rule.severity                                    = error
dotnet_naming_symbols.const_symbol.required_modifiers                     = const
dotnet_naming_symbols.const_symbol.applicable_kinds                       = field
dotnet_naming_style.const_style.capitalization                            = all_upper
dotnet_naming_style.const_style.word_separator                            = _

## 异步方法示例: xxxAsync
dotnet_naming_rule.async_method_rule.symbols                              = async_method_symbol
dotnet_naming_rule.async_method_rule.style                                = async_method_style
dotnet_naming_rule.async_method_rule.severity                             = error
dotnet_naming_symbols.async_method_symbol.required_modifiers              = async
dotnet_naming_symbols.async_method_symbol.applicable_kinds                = method
dotnet_naming_style.async_method_style.required_suffix                    = Async


# C# 代码风格规则
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#language-conventions
[*.cs]
# this.限定符
## IDE0003
dotnet_style_qualification_for_field                       = false : error
## IDE0003
dotnet_style_qualification_for_property                    = false : error
## IDE0003
dotnet_style_qualification_for_method                      = false : error
## IDE0003
dotnet_style_qualification_for_event                       = false : error

# 基元类型
## IDE0012
dotnet_style_predefined_type_for_locals_parameters_members = true : error
## IDE0013
dotnet_style_predefined_type_for_member_access             = true : error

# 修饰符
## IDE0040
dotnet_style_require_accessibility_modifiers               = always : error
## IDE0036
csharp_preferred_modifier_order                            = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async : error

# 表达式
## IDE0017
dotnet_style_object_initializer                            = true : error
## IDE0028
dotnet_style_collection_initializer                        = true : error
## IDE0033
dotnet_style_explicit_tuple_names                          = true : error
## IDE0029
dotnet_style_coalesce_expression                           = true : error
## IDE0031
dotnet_style_null_propagation                              = true : error
## IDE0037
dotnet_style_prefer_inferred_tuple_names                   = false : error
## IDE0037
dotnet_style_prefer_inferred_anonymous_type_member_names   = false : error

# 隐式和显式类型(var)
## IDE0007
csharp_style_var_for_built_in_types                        = true : error
## IDE0007
csharp_style_var_when_type_is_apparent                     = true : error
## IDE0007
csharp_style_var_elsewhere                                 = true : error

# 表达式体成员
## IDE0022
csharp_style_expression_bodied_methods                     = false : error
## IDE0021
csharp_style_expression_bodied_constructors                = false : error
## IDE0023,IDE0024
csharp_style_expression_bodied_operators                   = false : error
## IDE0025
csharp_style_expression_bodied_properties                  = when_on_single_line : error
## IDE0026
csharp_style_expression_bodied_indexers                    = when_on_single_line : error
## IDE0027
csharp_style_expression_bodied_accessors                   = when_on_single_line : error

# 模式匹配
## IDE0020
csharp_style_pattern_matching_over_is_with_cast_check      = true : error
## IDE0019
csharp_style_pattern_matching_over_as_with_null_check      = true : error

# 内联变量声明
## IDE0018
csharp_style_inlined_variable_declaration                  = true : error

# 表达式
## IDE0034
csharp_prefer_simple_default_expression                    = true : error
## IDE0042
csharp_style_deconstructed_variable_declaration            = false : error
## IDE0039
csharp_style_pattern_local_over_anonymous_function         = true : error

# Null检查
## IDE0016
csharp_style_throw_expression                              = false : error
## IDE0041
csharp_style_conditional_delegate_call                     = true : error

# 代码块
## IDE0011
csharp_prefer_braces                                       = true : error


# C# 代码格式化规则
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#formatting-conventions
# https://github.com/dotnet/roslyn/pull/15020
[*.cs]
# using排序
dotnet_sort_system_directives_first                                      = true

# 新行
csharp_new_line_before_open_brace                                        = all
csharp_new_line_before_else                                              = true
csharp_new_line_before_catch                                             = true
csharp_new_line_before_finally                                           = true
csharp_new_line_before_members_in_object_initializers                    = true
csharp_new_line_before_members_in_anonymous_types                        = true
csharp_new_line_between_query_expression_clauses                         = true

# 缩进
csharp_indent_block_contents                                             = true
csharp_indent_braces                                                     = false
csharp_indent_case_contents                                              = true
csharp_indent_case_labels                                                = true
csharp_indent_switch_labels                                              = true
csharp_indent_labels                                                     = one_less_than_current
csharp_label_indentation                                                 = true

# 间距
csharp_space_after_cast                                                  = false
csharp_space_after_colon_in_inheritance_clause                           = true
csharp_space_after_comma                                                 = true
csharp_space_after_dot                                                   = false
csharp_space_after_keywords_in_control_flow_statements                   = true
csharp_space_after_semicolon_in_for_statement                            = true
csharp_space_around_binary_operators                                     = before_and_after
csharp_space_around_declaration_statements                               = do_not_ignore
csharp_space_before_colon_in_inheritance_clause                          = true
csharp_space_before_comma                                                = false
csharp_space_before_dot                                                  = false
csharp_space_before_open_square_brackets                                 = false
csharp_space_before_semicolon_in_for_statement                           = false
csharp_space_between_empty_square_brackets                               = false
csharp_space_between_method_call_empty_parameter_list_parentheses        = false
csharp_space_between_method_call_name_and_opening_parenthesis            = false
csharp_space_between_method_call_parameter_list_parentheses              = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis        = false
csharp_space_between_method_declaration_parameter_list_parentheses       = false
csharp_space_between_parentheses                                         = none
csharp_space_between_square_brackets                                     = false

# 换行
csharp_preserve_single_line_statements                                   = false
csharp_preserve_single_line_blocks                                       = true

2 项目结构

https://github.com/linianhui/cake.example

下一篇 : [代码规范] HTTP APIs 设计/规范指南