VB.NET 中的代码检查
在 VB.NET 中,ReSharper 2025.2 提供了两种代码检查:272 项 检测错误的检查 ,例如语法错误、未解析的符号、编译器错误等(这些检查无法配置或禁用),以及 280 项 专有代码检查 ,您可以 禁用或更改其 严重性级别。
这些 代码检查 帮助您在所有打开的文件中 设计时 检测代码问题,并且还允许您 在特定范围内查找代码问题。
可配置的 VB.NET 检查列在下方,并按其 类别分组。
代码通知(1 项检查)
此类别分组了严重性级别较低的代码检查。
非活动的预处理器分支 |
常见实践和代码改进(118 项检查)
此类别分组了查找中等严重性问题的检查,这些问题主要影响代码的可读性。
层次结构中的注解重复 | |
自动属性可以设为仅 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' | |
显式指定字符串比较 | |
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 .. Is ..' 运算符 | |
使用 'TypeOf .. Is ..' 运算符 |
编译器警告(25 项检查)
此类别中的检查可在编译之前检测到 compiler warnings。
通过实例访问共享成员 | |
异步方法缺少 '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' 修饰符 | |
使用隐式类型变量声明 | |
使用隐式类型变量声明(显而易见) |
符号声明中的冗余(30 项检查)
此类别包括代码检查,主要具有 警告 严重性级别,用于检测空的和未使用的符号声明。
具有虚拟(可重写)成员的类从未被继承(非私有可访问性) | |
具有虚拟(可重写)成员的类从未被继承(私有可访问性) | |
实体仅用于捕获其名称(非私有可访问性) | |
实体仅用于捕获其名称(私有可访问性) | |
方法返回值从未使用(非私有可访问性) | |
方法返回值从未使用(私有可访问性) | |
未访问的局部变量 | |
未访问的局部变量仅用于丢弃 'out' 参数值 | |
未访问的主构造函数参数 | |
参数仅用于前置条件检查(非私有可访问性) | |
参数仅用于前置条件检查(私有可访问性) | |
参数输出值始终被丢弃(非私有可访问性) | |
参数输出值始终被丢弃(私有可访问性) | |
类型从未使用(非私有可访问性) | |
类型从未使用(私有可访问性) | |
类型成员从未通过基类型访问(非私有可访问性) | |
类型成员从未通过基类型访问(私有可访问性) | |
类型成员从未使用(非私有可访问性) | |
类型成员从未使用(私有可访问性) | |
类型成员仅在重写中使用(非私有可访问性) | |
类型成员仅在重写中使用(私有可访问性) | |
未使用的标签 | |
未使用的局部变量 | |
未使用的参数(非私有可访问性) | |
未使用的参数(私有可访问性) | |
部分方法中未使用的参数 | |
未使用的位置参数 | |
未使用的类型参数 | |
虚拟(可重写)成员从未被重写(非私有可访问性) | |
虚拟(可重写)成员从未被重写(私有可访问性) |
拼写问题(3 项检查)
这些检查 检测各种上下文中的拼写错误。
注释中的拼写错误 | |
标识符中的拼写错误 | |
字符串字面量中的拼写错误 |