VB.NET 中的代码检查
在 VB.NET 中,JetBrains Rider 2025.2 提供了两种代码检查:272 项 检测错误的检查 ,例如语法错误、未解析的符号、编译器错误等(这些检查无法配置或禁用),以及 280 项 专有代码检查 ,您可以 禁用或更改其 严重性级别。
这些 代码检查帮助您在所有打开的文件中 设计时检测代码问题,并且还允许您 在特定范围内查找代码问题。
可配置的 VB.NET 检查列在下方,并按其 类别分组。
代码通知(1 个检查)
此类别包含轻微严重性级别的代码检查。
非活动的预处理器分支 |
常见实践和代码改进(118 项检查)
此类别包含主要影响代码可读性的中等严重性问题的检查。
层次结构中的注解重复 | |
自动属性可以设置为仅 get(非私有访问权限) | |
自动属性可以设置为仅 get(私有访问权限) | |
改为检查引用相等性 | |
改为检查引用相等性 | |
类可以设为密封(不可继承)(非私有可访问性) | |
类可以设为密封(不可继承)(私有可访问性) | |
容器可空性属性用于非容器类型的声明 | |
将局部变量或字段转换为常量(非私有可访问性) | |
将局部变量或字段转换为常量(私有可访问性) | |
将属性转换为自动属性 | |
在可能的情况下将属性转换为自动属性 | |
将属性转换为带私有 setter 的自动属性 | |
字段可以设为只读(非私有访问权限) | |
字段可以设为只读(私有访问权限) | |
仅可读自动属性从未被赋值 | |
成员可以设为私有(非私有访问权限) | |
成员可以设为私有(私有访问权限) | |
成员可以设为受保护(非私有访问权限) | |
成员可以设为受保护(私有访问权限) | |
成员可以设为静态(共享)(非私有访问权限) | |
成员可以设为静态(共享)(私有访问权限) | |
成员或类型可以设为内部(友元) | |
多次使用可空属性 | |
在 void 或值类型声明中使用可空属性 | |
参数可以声明为基类型 | |
构造函数的参数可以声明为基类型 | |
参数类型可以是 IEnumerable<T>(非私有可访问性) | |
参数类型可以是 IEnumerable<T>(私有可访问性) | |
可能的错误参数 | |
可能错误地调用了 GetType() | |
可能错误地调用了 GetType() | |
属性可以设置为仅初始化(非私有可访问性) | |
属性可以设置为仅初始化(私有可访问性) | |
移除 ToList() | |
移除 ToList() | |
替换为 FirstOrDefault($args$) | |
替换为 LastOrDefault($args$) | |
替换为 OfType<T>()(替换为 OfType(Of ..)()) | |
替换为 OfType<T>()(替换为 OfType(Of ..)()) | |
替换为 OfType<T>().Any()(替换为 OfType(Of ..)().Any()) | |
替换为 OfType<T>().Any()(替换为 OfType(Of ..)().Any(..)) | |
替换为 OfType<T>().Count()(替换为 OfType(Of ..)().Count()) | |
替换为 OfType<T>().Count()(替换为 OfType(Of ..)().Count(..)) | |
替换为 OfType<T>().First()(替换为 OfType(Of ..)().First()) | |
替换为 OfType<T>().First()(替换为 OfType(Of ..)().First(..)) | |
替换为 OfType<T>().FirstOrDefault()(替换为 OfType(Of ..)().FirstOrDefault()) | |
替换为 OfType<T>().FirstOrDefault()(替换为 OfType(Of ..)().FirstOrDefault(..)) | |
替换为 OfType<T>().Last()(替换为 OfType(Of ..)().Last()) | |
替换为 OfType<T>().Last()(替换为 OfType(Of ..)().Last(..)) | |
替换为 OfType<T>().LastOrDefault()(替换为 OfType(Of ..)().LastOrDefault()) | |
替换为 OfType<T>().LastOrDefault()(替换为 OfType(Of ..)().LastOrDefault(..)) | |
替换为 OfType<T>().Single()(替换为 OfType(Of ..)().Single()) | |
替换为 OfType<T>().Single()(替换为 OfType(Of ..)().Single(..)) | |
替换为 OfType<T>().SingleOrDefault()(替换为 OfType(Of ..)().SingleOrDefault()) | |
替换为 OfType<T>().SingleOrDefault()(替换为 OfType(Of ..)().SingleOrDefault(..)) | |
替换为 OfType<T>().Where()(替换为 OfType(Of ..)().Where(..)) | |
替换为单一赋值 | |
替换为单一赋值 | |
替换为单次调用 Any(..) | |
替换为单次调用 Count(..) | |
替换为单次调用 First(..) | |
替换为对 FirstOrDefault(..) 的单次调用 | |
替换为对 Last(..) 的单次调用 | |
替换为对 LastOrDefault(..) 的单次调用 | |
替换为对 Single(..) 的单次调用 | |
替换为对 SingleOrDefault(..) 的单次调用 | |
替换为 SingleOrDefault($args$) | |
返回类型可以是 IEnumerable<T>(非私有可访问性) | |
返回类型可以是 IEnumerable<T>(私有可访问性) | |
简化条件运算符 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化表达式 | |
简化 'IIf' | |
明确指定字符串比较 | |
String.Compare 是特定于文化的(string.Compare(string, int, string, int) 是特定于文化的) | |
String.Compare 是特定于文化的(string.Compare(string, int, string, int, bool) 是特定于文化的) | |
String.Compare 是特定于文化的(string.Compare(string, int, string, int, bool) 是特定于文化的) | |
String.Compare 是特定于文化的(string.Compare(string, string) 是特定于文化的) | |
String.Compare 是特定于区域性的(string.Compare(string, string, bool) 是特定于区域性的) | |
String.Compare 是特定于区域性的(string.Compare(string, string, bool) 是特定于区域性的) | |
String.CompareTo 是特定于区域性的 | |
String.EndsWith 是特定于区域性的(string.EndsWith(string) 是特定于区域性的) | |
String.IndexOf 是特定于区域性的(string.IndexOf(string) 是特定于区域性的) | |
String.IndexOf 是特定于区域性的(string.IndexOf(string, int) 是特定于区域性的) | |
String.IndexOf 是特定于区域性的(string.IndexOf(string, int) 是特定于区域性的) | |
String.LastIndexOf 是特定于区域性的(string.LastIndexOf(string) 是特定于区域性的) | |
String.LastIndexOf 是特定于区域性的(string.LastIndexOf(string, int) 是特定于区域性的) | |
String.LastIndexOf 是特定于区域性的(string.LastIndexOf(string, int) 是特定于区域性的) | |
String.StartsWith 是特定于区域性的(string.StartsWith(string) 是特定于区域性的) | |
结构体可以声明为 readonly | |
结构体缺少 'IEquatable' 实现(非私有可访问性) | |
结构体缺少 'IEquatable' 实现(私有可访问性) | |
结构体成员可以声明为 readonly | |
使用默认相等成员的结构体用于比较(非私有可访问性) | |
使用默认相等成员的结构体用于比较(私有可访问性) | |
try-catch 和 try-finally 语句可以合并 | |
在记录中使用了具有可疑相等性的类型(非私有可访问性) | |
在记录中使用了具有可疑相等性的类型(私有可访问性) | |
使用数组创建表达式 | |
使用数组创建表达式 | |
改用 First() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 IsInstanceOfType(..) | |
使用 'TypeOf .. 是 ..' 运算符 | |
使用 'TypeOf .. 是 ..' 运算符 |
编译器警告(25 项检查)
此类别的检查可在编译前检测到 编译器警告。
通过实例访问共享成员 | |
异步方法缺少 'Await' 运算符 | |
由于此调用未被等待,当前方法的执行将在调用完成之前继续。 考虑将 'Await' 运算符应用于调用结果。 | |
字段从未使用过 | |
函数在所有代码路径上未返回引用类型值 | |
函数在所有代码路径上未返回结构体值 | |
成员隐藏了可重写的成员 | |
Imports 'name' 中指定的命名空间或类型不包含任何公共成员或无法找到 | |
命名空间应为此项目的默认命名空间 | |
未访问的字段 | |
未访问的局部变量 | |
对相等值类型的冗余 DirectCast | |
将 X 转换为 Y 时可能会发生运行时错误 | |
将 X 转换为 Y 时可能会发生运行时错误 | |
XML 注释中的语法错误 | |
应用于参数的 CallerArgumentExpressionAttribute 将不起作用,因为它是自引用的 | |
应用于参数的 CallerArgumentExpressionAttribute 将不起作用。 它应用了一个无效的参数名称。 | |
此类型仅用于评估目的,可能会在未来更新中更改或移除。 抑制此诊断以继续。 | |
未赋值的字段 | |
未赋值的 readonly 字段 | |
未使用的局部变量 | |
使用已过时的成员 | |
使用已过时的成员(无消息) | |
变量在赋值之前被使用 | |
XML 注释中包含无法解析的带有 'cref' 属性的标签 |
约束违规(2 项检查)
此类别包括代码检查,主要具有 警告 严重性级别,检测与符号属性相关的违规,包括 JetBrains Rider 的代码注解 和其他类似问题。
命名不一致 | |
命名空间与文件位置不一致 |
语法问题(4 项检查)
此类别中的检查报告字符串字面量和文档注释中的 语法问题。
注释中的语法错误 | |
标记属性值中的语法错误 | |
标记文本中的语法错误 | |
字符串文字中的语法错误 |
语言使用机会(7 项检查)
此类别包括代码检查,主要具有 建议严重性级别,通知您何时可以使用更高级的语言结构。 这些检查会检测过时语言版本的语法,并建议使用更现代语言版本的功能。 对于大多数支持的语言,可以 自动检测或手动设置语言版本。
将静态方法调用转换为扩展方法调用 | |
foreach 循环可以转换为 LINQ 表达式,但将使用另一个 'GetEnumerator' 方法 | |
循环可以转换为 LINQ 表达式 | |
部分 foreach 循环可以转换为 LINQ 表达式,但将使用另一个 'GetEnumerator' 方法 | |
部分循环体可以转换为 LINQ 表达式 | |
传递字符串插值表达式 | |
使用字符串插值表达式 |
潜在的代码质量问题(67 项检查)
此类别包括检测关键问题(代码异味)的检查,主要具有 错误 或 警告 级别。 此类别还包括 确保本地化支持的检查。
'?:' 表达式的 true 和 false 分支相同 | |
[ThreadStatic] 无法与实例字段一起使用 | |
抽象或虚拟(可重写)事件从未被调用 | |
访问已释放的捕获变量 | |
在闭包中访问 foreach 变量 | |
访问已修改的捕获变量 | |
层次结构中的注解冲突 | |
自动属性访问器从未使用(非私有访问权限) | |
自动属性访问器从未使用(私有访问权限) | |
调用具有隐式默认参数的基成员 | |
调用 'base.Equals(...)' 是引用相等 | |
无法解析属性 | |
无法解析资源 | |
无法解析资源项 | |
无法在文本参数中解析符号 | |
类从未被实例化(非私有访问权限) | |
类从未被实例化(私有访问权限) | |
集合内容从未被查询(非私有访问权限) | |
集合内容从未被查询(私有访问权限) | |
集合从未更新(非私有访问权限) | |
集合从未更新(私有访问权限) | |
不要在格式字符串的格式说明符后使用右大括号 | |
元素可本地化 | |
浮点数的相等性比较 | |
事件从未被订阅(非私有访问权限) | |
事件从未被订阅(私有访问权限) | |
事件从未被调用 | |
可能是有意重新抛出异常 | |
显式参数传递给具有调用者信息属性的参数 | |
函数从不返回 | |
类型没有析构函数却调用了 'GC.SuppressFinalize' | |
迭代器从不返回 | |
局部变量隐藏了成员 | |
未访问的字段(非私有访问权限) | |
未访问的字段(私有访问权限) | |
未访问的位置属性(非私有访问权限) | |
未访问的位置属性(私有访问权限) | |
在 'GetHashCode()' 中引用了非只读类型成员 | |
'Object.ReferenceEquals' 始终为 false,因为它是用值类型调用的 | |
可以使用运算符 'is'/'Type Of ... Is ...' | |
'out' 参数在退出时未被赋值 | |
重写的 GetHashCode 调用了基类 'Object.GetHashCode()' | |
参数隐藏了成员 | |
可能不正确的双重检查锁定模式实现。 可能对检查字段进行多次写入访问。 | |
可能不正确的双重检查锁定模式实现。 读取检查字段的访问。 | |
可能的无限继承 | |
可能的多次枚举 | |
可能写入 'Me' | |
可能在 readonly 变量上调用了非纯结构体方法:在调用之前结构体值始终会被复制 | |
未使用纯方法的返回值 | |
相似表达式比较 | |
泛型类型中的静态字段或自动属性 | |
静态成员初始化器引用了下面或其他部分的静态成员 | |
字符串格式化方法问题 | |
结构化日志消息项存在重复或仅大小写不同 | |
结构化消息模板问题 | |
可疑的类型转换或检查 | |
模块中的符号可能在运行时丢失 | |
'l' 后缀容易与数字 '1' 混淆 | |
线程静态字段具有初始化器 | |
类型检查和转换可以合并 | |
未赋值的字段(非私有访问权限) | |
未赋值的字段(私有访问权限) | |
未赋值的 readonly 字段 | |
在格式字符串中使用格式说明符 | |
分配给非变量限定符表达式的属性的值可能会丢失 | |
'void' 方法带有 [Pure] 属性注解 |
代码中的冗余(23 项检查)
此类别中的代码检查查找冗余和无用代码,这些代码会影响代码的可读性和样式,可以安全地删除。 某些代码冗余无法自动修复,针对这些冗余的快速修复将在交互模式下执行,需要用户输入。 但大多数冗余可以在无需用户交互的情况下修复,使用 范围内修复 或 代码清理。
赋值未被使用 | |
显式 'value' 参数声明是多余的 | |
表达式始终为 'true' 或始终为 'false' | |
迭代器函数没有 'Yield' 语句 | |
多行 'If' 语句中的关键字 'Then' 是多余的 | |
无参数属性的括号是多余的 | |
如果属性没有参数,则括号是多余的 | |
传递给调用者参数表达式参数的冗余参数 | |
冗余的数组下界指定 | |
冗余的强制转换 | |
冗余的空 'Case Else' 语句 | |
冗余的显式数组大小指定 | |
冗余的 'Me.' 限定符 | |
冗余的 'MyBase.' 限定符 | |
冗余的 'MyClass.' 限定符 | |
逻辑条件表达式中的冗余操作数 | |
冗余的限定符 | |
移除冗余的括号 | |
不可达代码 | |
未使用的导入子句 | |
使用隐式 'ByVal' 修饰符 | |
使用隐式类型变量声明 | |
使用隐式类型变量声明(显而易见) |
符号声明中的冗余(30 项检查)
此类别包括代码检查,主要是 警告 严重级别,用于检测空的和未使用的符号声明。
具有虚拟(可重写)成员的类从未被继承(非私有访问权限) | |
具有虚拟(可重写)成员的类从未被继承(私有访问权限) | |
实体仅用于捕获其名称(非私有访问权限) | |
实体仅用于捕获其名称(私有访问权限) | |
方法返回值从未被使用(非私有访问权限) | |
方法返回值从未被使用(私有访问权限) | |
未访问的局部变量 | |
未访问的局部变量仅用于丢弃 'out' 参数值 | |
未访问的主构造函数参数 | |
参数仅用于前置条件检查(非私有访问权限) | |
参数仅用于前置条件检查(私有访问权限) | |
参数输出值始终被丢弃(非私有访问权限) | |
参数输出值始终被丢弃(私有访问权限) | |
类型从未使用(非私有访问权限) | |
类型从未使用(私有访问权限) | |
类型成员从未通过基类型访问(非私有访问权限) | |
类型成员从未通过基类型访问(私有访问权限) | |
类型成员从未使用(非私有访问权限) | |
类型成员从未使用(私有访问权限) | |
类型成员仅在重写中使用(非私有访问权限) | |
类型成员仅在重写中使用(私有访问权限) | |
未使用的标签 | |
未使用的局部变量 | |
未使用的参数(非私有访问权限) | |
未使用的参数(私有访问权限) | |
部分方法中未使用的参数 | |
未使用的位置参数 | |
未使用的类型参数 | |
虚拟(可重写)成员从未被重写(非私有访问权限) | |
虚拟(可重写)成员从未被重写(私有访问权限) |
拼写问题(3 项检查)
这些检查 检测各种上下文中的拼写错误。
注释中的拼写错误 | |
标识符中的拼写错误 | |
字符串文字中的拼写错误 |