语言和不必要的规则
代码样式语言规则会影响 .NET 编程语言的各种构造(如修饰符和括号)的使用方式。
此类别还包括标识代码库中不必要且可以重构或移除的部件。 出现不必要的代码表示存在以下一个或多个问题:
- 可读性:不必要地降低可读性的代码。
- 可维护性:重构后不再使用并且不必维护的代码。
- 性能:不必要的计算不会产生副作用,但会导致不必要的性能开销。
- 功能性:导致所需代码冗余的代码中的功能性问题。 例如,在方法意外忽略输入参数的情况下,IDE0060 会标记未使用的参数。
语言规则分为以下几个类别:
- .NET 样式规则:适用于 C# 和 Visual Basic 的规则。 这些规则的选项名称以
dotnet_style_
前缀开头。 - C# 样式规则:特定于 C# 代码的规则。 这些规则的选项名称以
csharp_style_
前缀开头。 - Visual Basic 样式规则:特定于 Visual Basic 代码的规则。 这些规则的选项名称以
visual_basic_style_
前缀开头。
选项格式
许多语言规则具有一个或多个用于自定义首选样式的关联选项。 例如,使用简单的“using”语句 (IDE0063) 具有关联的选项 csharp_prefer_simple_using_statement
,可用于定义是首选 using
声明还是 using
语句。 规则会强制实施你在指定级别选择的选项,例如警告或错误。
可以在配置文件中指定语言规则的选项,格式如下:
option_name = value
(Visual Studio 2019 和更高版本)
或
option_name = value:severity
值
对于每个语言规则,可指定一个定义是否或何时以此样式为首选项的值。 许多规则都接受
true
值(以此样式为首选项)或false
值(不以此样式为首选项)。 其他规则接受when_on_single_line
或never
等值。严重性(在 Visual Studio 2019 及更高版本中为可选)
此规则的第二部分指定规则的严重性级别。 在 .NET 9 及更高版本中,始终遵循严重性,即在开发 IDE 内部和 命令行生成期间。 在 .NET 8 和早期版本中,此严重性设置仅在开发 IDE(如 Visual Studio)内受尊重,而不是在生成期间。
如果使用的是 .NET 8 SDK 或早期版本,并且希望在生成时遵守严重性,可以通过以下两种方式之一执行此操作:
- 将 AnalysisLevel> 或
<AnalysisLevelStyle>
属性设置为9.0
或更高或设置为preview
。< - 请改用分析器基于规则 ID 的严重性配置语法来设置严重性。 语法采用形式
dotnet_diagnostic.<rule ID>.severity = <severity>
(例如,dotnet_diagnostic.IDE0040.severity = warning
)。 有关详细信息,请参阅严重性级别。
- 将 AnalysisLevel> 或
提示
从 Visual Studio 2019 开始,发生样式冲突后,可以在“快速操作”灯泡菜单中配置代码样式规则。
规则索引
语言和不必要的代码规将进一步分为子类别,例如表达式级首选项、代码块首选项和修饰符首选项。
using
指令首选项- 代码块首选项
- Expression-Bodied 成员
- 表达式级首选项
- 字段首选项
- 语言关键字与框架类型首选项
- 修饰符首选项
- 新行首选项
- Null 检查首选项
- 参数首选项
- 括号首选项
- 模式匹配首选项
- 抑制首选项
This.
和me.
首选项var
首选项
using
指令首选项
.NET 样式规则(C# 和 Visual Basic):
C# 样式规则:
代码块首选项
C# 样式规则:
- 添加大括号 (IDE0011)
- 使用简单的 using 语句 (IDE0063)
- 命名空间声明首选项 (IDE0160 和 IDE0161)
- 删除不必要的 Lambda 表达式 (IDE0200)
- 转换为顶级语句 (IDE0210)
- 转换为“Program.Main”样式程序 (IDE0211)
- 使用主构造函数 (IDE0290)
- 首选“System.Threading.Lock”(IDE0330)
Expression-Bodied 成员
C# 样式规则:
- 使用构造函数的表达式主体 (IDE0021)
- 使用方法的表达式主体 (IDE0022)
- 对运算符使用表达式正文(IDE0023,IDE0024)
- 使用属性的表达式主体 (IDE0025)
- 使用索引器的表达式主体 (IDE0026)
- 使用访问器的表达式主体 (IDE0027)
- 使用 Lambda 的表达式主体 (IDE0053)
- 使用本地函数的表达式主体 (IDE0061)
表达式级首选项
.NET 样式规则(C# 和 Visual Basic):
- 简化名称 (IDE0001)
- 简化成员访问 (IDE0002)
- 删除不必要的强制转换 (IDE0004)
- 将缺失的事例添加到 switch 语句 (IDE0010)
- 使用对象初始值设定项 (IDE0017)
- 使用集合初始值设定项 (IDE0028)
- 可以简化 Null 检查(IDE0029、IDE0030 和 IDE0270)
- 使用 Null 传播 (IDE0031)
- 使用自动实现的属性 (IDE0032)
- 使用显式提供的元组名称 (IDE0033)
- 删除无法访问的代码 (IDE0035)
- 使用推断的成员名称 (IDE0037)
- 使用“is null”检查 (IDE0041)
- 使用 assignment 的条件表达式 (IDE0045)
- 使用 return 的条件表达式 (IDE0046)
- 将匿名类型转换为元组 (IDE0050)
- 删除未使用的私有成员 (IDE0051)
- 删除未读的私有成员 (IDE0052)
- 使用复合赋值(IDE0054 和 IDE0074)
- 删除不必要的表达式值 (IDE0058)
- 删除不必要的赋值 (IDE0059)
- 使用 System.HashCode.Combine (IDE0070)
- 简化内插 (IDE0071)
- 简化条件表达式 (IDE0075)
- 将
typeof
转换为nameof
(IDE0082) - 删除不必要的相等运算符 (IDE0100)
- 简化 LINQ 表达式 (IDE0120)
- 命名空间与文件夹结构不匹配 (IDE0130)
C# 样式规则:
- 使用 throw 表达式 (IDE0016)
- 内联变量声明 (IDE0018)
- 简化 default 表达式 (IDE0034)
- 使用本地函数而不是 Lambda (IDE0039)
- 析构变量声明 (IDE0042)
- 使用索引运算符 (IDE0056)
- 使用范围运算符 (IDE0057)
- 将缺失的事例添加到 switch 表达式 (IDE0072)
- 删除不必要的抑制运算符 (IDE0080)
- 简化
new
表达式 (IDE0090) - 删除不必要的弃元 (IDE0110)
- 首选“null”检查而不是类型检查 (IDE0150)
- 使用元组来交换值 (IDE0180)
- 在 foreach 循环中添加显式强制转换 (IDE0220)
- 使用 UTF-8 字符串文本 (IDE0230)
- Nullable 指令是冗余的 (IDE0240)
- Nullable 指令是不必要的 (IDE0241)
- 使用 array 的集合表达式 (IDE0300)
- 使用 empty 的集合表达式 (IDE0301)
- 使用 stack alloc 的集合表达式 (IDE0302)
- 使用
Create()
的集合表达式 (IDE0303) - 使用 builder 的集合表达式 (IDE0304)
- 使用 fluent 的集合表达式 (IDE0305)
Visual Basic 样式规则:
字段首选项
.NET 样式规则(C# 和 Visual Basic):
语言关键字与框架类型首选项
.NET 样式规则(C# 和 Visual Basic):
修饰符首选项
.NET 样式规则(C# 和 Visual Basic):
C# 样式规则:
- 将本地函数设置为静态 (IDE0062)
- 将结构字段设置为可写 (IDE0064)
- 可以将结构设为“只读”(IDE0250)
- 可以将成员设为“只读”(IDE0251)
- 使匿名函数静态(IDE0320)
新行首选项
- 允许多个空行 (IDE2000)
- 允许将嵌入的语句放在同一行上 (IDE2001)
- 允许在连续大括号之间使用空行 (IDE2002)
- 允许块后紧跟语句 (IDE2003)
- 允许在构造函数初始化表达式中的冒号后面使用空行 (IDE2004)
- 允许在条件表达式中的标记后使用空行 (IDE2005)
- 允许在箭头表达式中的标记后使用空行 (IDE2006)
Null 检查首选项
C# 样式规则:
参数首选项
.NET 样式规则(C# 和 Visual Basic):
括号首选项
.NET 样式规则(C# 和 Visual Basic):
模式匹配首选项
C# 样式规则:
- 使用模式匹配来避免“as”后跟“null”检查 (IDE0019)
- 使用模式匹配来避免后跟强制转换的“is”检查(IDE0020 和 IDE0038)
- 使用 switch 表达式 (IDE0066)
- 使用模式匹配 (IDE0078 和 IDE0260)
- 使用模式匹配(
not
运算符)(IDE0083) - 简化属性模式 (IDE0170)
抑制首选项
.NET 样式规则(C# 和 Visual Basic):
This.
和 me.
.NET 样式规则(C# 和 Visual Basic):
var
首选项
C# 样式规则: