VB.NET 中的代码检查
在 VB.NET 中,ReSharper 2026.3 提供两种代码检查:274 项 检测错误的检查 ,例如语法错误、未解析的符号、编译器错误等(无法配置或禁用任何这些检查),以及 266 项 专有代码检查 ,其中任何一项都可以 禁用或更改其 严重性级别。
These code inspections help you detect code issues at design time in all open files, and additionally they allow you to find code issues in specific scope.
可配置的 VB.NET 检查列在下方,并按其 类别分组。
代码通知(1 项检查)
此类别将严重性级别较低的代码检查分组。
非活动的预处理器分支 |
常见实践和代码改进(102 项检查)
此类别分组的检查主要查找中等严重性的问题,这些问题主要影响代码的可读性。
层次结构中的注解重复 | |
自动属性可以设为仅 get(非私有可访问性) | |
自动属性可以设为仅 get(私有可访问性) | |
检查引用相等性 | |
检查引用相等性 | |
类可以设为密封(不可继承)(非私有可访问性) | |
类可以设为密封(不可继承)(私有可访问性) | |
容器可空性属性用于非容器类型的声明 | |
将局部变量或字段转换为常量(非私有可访问性) | |
将局部变量或字段转换为常量(私有可访问性) | |
将属性转换为自动属性 | |
在可能的情况下将属性转换为自动属性 | |
将属性转换为带私有 setter 的自动属性 | |
字段可以设为 readonly(非私有可访问性) | |
字段可以设为 readonly(私有可访问性) | |
仅 get 的自动属性从未被赋值 | |
成员可以设为私有(非私有可访问性) | |
成员可以设为私有(私有可访问性) | |
成员可以设为受保护(非私有可访问性) | |
成员可以设为受保护(私有可访问性) | |
成员可以设为静态(共享)(非私有可访问性) | |
成员可以设为静态(共享)(私有可访问性) | |
成员或类型可以设为内部(友元) | |
多重可空属性的使用 | |
可空性属性用于 void 或值类型的声明 | |
参数可以声明为基类型 | |
构造函数的参数可以声明为基类型 | |
参数类型可以是 IEnumerable<T>(非私有可访问性) | |
参数类型可以是 IEnumerable<T>(私有可访问性) | |
可能的错误参数 | |
可能错误地调用了 GetType() | |
可能错误地调用了 GetType() | |
属性可以设为仅 init(非私有可访问性) | |
属性可以设为仅 init(私有可访问性) | |
移除 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' | |
结构体可以设为 readonly | |
结构体缺少 'IEquatable' 实现(非私有可访问性) | |
结构体缺少 'IEquatable' 实现(私有可访问性) | |
结构体成员可以设为 readonly | |
具有默认相等成员的结构体用于比较(非私有可访问性) | |
具有默认相等成员的结构体用于比较(私有可访问性) | |
try-catch 和 try-finally 语句可以合并 | |
具有可疑相等性的类型用于记录(非私有可访问性) | |
具有可疑相等性的类型用于记录(私有可访问性) | |
使用数组创建表达式 | |
使用数组创建表达式 | |
改用 First() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 IsInstanceOfType(..) | |
使用 'TypeOf .. Is ..' 运算符 | |
使用 'TypeOf .. Is ..' 运算符 |
编译器警告(25 项检查)
此类别中的检查会在编译前检测编译器警告。
通过实例访问共享成员 | |
异步方法缺少 'Await' 运算符 | |
由于此调用未等待,当前方法的执行将在调用完成之前继续。 请考虑对调用结果应用 'Await' 运算符。 | |
字段从未使用 | |
函数在所有代码路径上未返回引用类型值 | |
函数在所有代码路径上未返回结构体值 | |
成员遮蔽了可重写成员 | |
Imports 'name' 中指定的命名空间或类型不包含任何公共成员或无法找到 | |
命名空间应为此项目的默认命名空间 | |
未访问的字段 | |
未访问的局部变量 | |
对等值类型的冗余 DirectCast | |
将 X 转换为 Y 时可能会发生运行时错误 | |
将 X 转换为 Y 时可能会发生运行时错误 | |
XML 注释中的语法错误 | |
应用于参数的 CallerArgumentExpressionAttribute 无效,因为它是自引用的 | |
应用于参数的 CallerArgumentExpressionAttribute 无效。 它应用了无效的参数名称。 | |
此类型仅用于评估目的,可能会在未来更新中更改或移除。 抑制此诊断以继续。 | |
未分配的字段 | |
未分配的 readonly 字段 | |
未使用的局部变量 | |
使用了已过时的成员 | |
使用了已过时的成员(无消息) | |
变量在赋值前被使用 | |
XML 注释中包含无法解析的 'cref' 属性的标签 |
约束违规(2 项检查)
此类别包括代码检查,主要具有 警告 严重性级别,用于检测与符号属性相关的违规行为,包括 ReSharper 的代码注解 和其他类似问题。
命名不一致 | |
命名空间与文件位置不对应 |
语法问题(4 项检查)
此类别中的检查报告字符串字面量和文档注释中的 语法问题。
注释中的语法错误 | |
标记属性值中的语法错误 | |
标记文本中的语法错误 | |
字符串字面量中的语法错误 |
语言使用机会(7 项检查)
此类别包括代码检查,主要具有 建议严重性级别,当可以使用更高级的语言结构时会通知您。 这些检查检测过时语言版本的语法,并建议使用更现代语言版本的功能。 对于大多数支持的语言,语言版本 可以自动检测或手动设置。
将静态方法调用转换为扩展成员调用(将限定的静态方法调用转换为扩展成员调用) | |
Foreach 循环可以转换为 LINQ 表达式,但将使用另一个 'GetEnumerator' 方法 | |
循环可以转换为 LINQ 表达式 | |
Foreach 循环的一部分可以转换为 LINQ 表达式,但将使用另一个 'GetEnumerator' 方法 | |
循环体的一部分可以转换为 LINQ 表达式 | |
传递字符串插值表达式 | |
使用字符串插值表达式 |
潜在代码质量问题(67 项检查)
此类别包括检测关键问题(代码异味)的检查,主要具有 错误 或 警告 级别。 此类别还包括 确保本地化支持的检查。
'?:' 表达式的 true 和 false 分支相同 | |
[ThreadStatic] 不适用于实例字段 | |
抽象或虚拟(可重写)事件从未被调用 | |
访问已释放的捕获变量 | |
在闭包中访问 foreach 变量 | |
访问已修改的捕获变量 | |
层次结构中的注解冲突 | |
自动属性访问器从未使用(非私有可访问性) | |
自动属性访问器从未使用(私有可访问性) | |
调用具有隐式默认参数的基成员 | |
调用 'base.Equals(...)' 是引用相等 | |
无法解析属性 | |
无法解析资源 | |
无法解析资源项 | |
无法解析文本参数中的符号 | |
类从未被实例化(非私有可访问性) | |
类从未被实例化(私有可访问性) | |
集合内容从未被查询(非私有可访问性) | |
集合内容从未被查询(私有可访问性) | |
集合从未被更新(非私有可访问性) | |
集合从未被更新(私有可访问性) | |
在格式字符串中格式说明符后不要使用右大括号 | |
元素是可本地化的 | |
浮点数的相等性比较 | |
事件从未被订阅(非私有可访问性) | |
事件从未被订阅(私有可访问性) | |
事件从未被调用 | |
可能是有意的异常重新抛出 | |
显式参数传递给带有调用者信息属性的参数 | |
函数从未返回 | |
调用 'GC.SuppressFinalize' 的类型没有析构函数 | |
迭代器从未返回 | |
局部变量隐藏了成员 | |
未访问的字段(非私有可访问性) | |
未访问的字段(私有可访问性) | |
未访问的位置属性(非私有可访问性) | |
未访问的位置属性(私有可访问性) | |
在 'GetHashCode()' 中引用的非 readonly 类型成员 | |
'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' 修饰符 | |
使用隐式类型变量声明 | |
使用隐式类型变量声明(显而易见) |
符号声明中的冗余(32 项检查)
此类别包括代码检查,主要为 警告严重性级别,用于检测空的和未使用的符号声明。
具有虚拟(可重写)成员的类从未被继承(非私有可访问性) | |
具有虚拟(可重写)成员的类从未被继承(私有可访问性) | |
实体仅用于捕获其名称(非私有可访问性) | |
实体仅用于捕获其名称(私有可访问性) | |
方法返回值从未使用(非私有可访问性) | |
方法返回值从未使用(私有可访问性) | |
未访问的局部变量 | |
未访问的局部变量仅用于丢弃 'out' 参数值 | |
未访问的主构造函数参数 | |
参数仅用于前置条件检查(非私有可访问性) | |
参数仅用于前置条件检查(私有可访问性) | |
参数输出值始终被丢弃(非私有可访问性) | |
参数输出值始终被丢弃(私有可访问性) | |
类型从未使用(非私有可访问性) | |
类型从未使用(私有可访问性) | |
类型成员从未通过基类型访问(非私有可访问性) | |
类型成员从未通过基类型访问(私有可访问性) | |
类型成员从未使用(非私有可访问性) | |
类型成员从未使用(私有可访问性) | |
类型成员仅在重写中使用(非私有可访问性) | |
类型成员仅在重写中使用(私有可访问性) | |
未使用的标签 | |
未使用的局部变量 | |
未使用的参数(非私有可访问性) | |
未使用的参数(私有可访问性) | |
部分方法中未使用的参数 | |
未使用的位置参数 | |
未使用的类型参数 | |
未使用的联合用例(非私有可访问性) | |
未使用的联合用例(私有可访问性) | |
虚拟(可重写)成员从未被重写(非私有可访问性) | |
虚拟(可重写)成员从未被重写(私有可访问性) |
拼写问题(3 项检查)
这些检查 检测各种上下文中的拼写错误。
注释中的拼写错误 | |
标识符中的拼写错误 | |
字符串字面量中的拼写错误 |