C# 代码检查
在 C# 中,ReSharper 2025.2 提供两类代码检查:1241 项 错误检测检查 ,如语法错误、未解析符号、编译器错误等(这些检查无法配置或禁用),以及 1064 项 专有代码检查 ,这些检查均可 禁用或更改其 严重性级别。
这些 代码检查 帮助您在所有打开的文件中 设计时 检测代码问题,并且还允许您 在特定范围内查找代码问题。
可配置的 C# 检查项如下所示,按其 类别分组。
代码通知(2 项检查)
此类别分组了严重性级别较低的代码检查。
常见实践和代码改进(174 项检查)
此类别分组了查找中等严重性问题的检查,这些问题主要影响代码的可读性。
通过派生类型访问类型的静态成员 | |
忽略了 'Stream.Read()' 实际读取的字节数 | |
在本地函数前添加显式 'return' 或 'continue' | |
层次结构中的注解重复 | |
自动属性可以设为仅 get(非私有可访问性) | |
自动属性可以设为仅 get(私有可访问性) | |
基类成员有 'params' 参数,但重写方法没有 | |
可在 'Add' 前简化 'Contains' | |
类型转换表达式可替换为显式类型参数 | |
类型转换表达式可替换为显式变量类型 | |
类型转换表达式可替换为 lambda 返回类型 | |
类型转换表达式可替换为简化类型参数 | |
将锁字段类型更改为 'System.Threading.Lock' | |
检查引用相等性 | |
检查引用相等性 | |
检查引用相等性 | |
检查引用相等性 | |
类可以设为密封(不可继承)(非私有可访问性) | |
类可以设为密封(不可继承)(私有可访问性) | |
易混淆的类似代码块语句 | |
容器可空性属性用于非容器类型的声明 | |
将 'if do while' 转换为 'while' | |
将 'if' 转换为 '||' | |
将局部变量或字段转换为常量(非私有可访问性) | |
将局部变量或字段转换为常量(私有可访问性) | |
声明可空性已推断(参数被推断为非 null) | |
声明可空性已推断(参数被推断为可空) | |
声明可空性已推断(类型成员被推断为非 null) | |
声明可空性已推断(类型成员被推断为可空) | |
字典项移除可简化为单次 'Remove' | |
字典查找可简化为 'GetValueOrDefault' | |
字典查找可简化为 'TryAdd' | |
字典查找可简化为 'TryGetValue' | |
空语句是多余的 | |
提取通用属性模式 | |
字段可以设为 readonly(非私有可访问性) | |
字段可以设为 readonly(私有可访问性) | |
仅 get 的自动属性从未被赋值 | |
取反条件 | |
迭代变量可声明为更具体的类型 | |
合并局部变量声明和赋值 | |
本地函数可设为 static | |
局部变量声明范围过宽 | |
将抽象类中的构造函数设为 protected | |
成员可以设为私有(非私有可访问性) | |
成员可以设为私有(私有可访问性) | |
成员可以设为受保护(非私有可访问性) | |
成员可以设为受保护(私有可访问性) | |
成员可以设为静态(共享)(非私有可访问性) | |
成员可以设为静态(共享)(私有可访问性) | |
成员或类型可以设为内部(友元) | |
方法有异步重载 | |
方法有支持取消的异步重载 | |
方法支持取消操作 | |
缺少 private 或 internal 类型或成员的 XML 注释 | |
多重可空属性的使用 | |
嵌套字符串插值可内联 | |
可空性属性用于 void 或值类型的声明 | |
可空性属性用于无法被其他代码直接引用的声明 | |
参数可以声明为基类型 | |
构造函数的参数可以声明为基类型 | |
参数类型可以是 IEnumerable<T>(非私有可访问性) | |
参数类型可以是 IEnumerable<T>(私有可访问性) | |
建议优先使用具体值而非 'default' 或 'new()' | |
属性可以设为仅 init(非私有可访问性) | |
属性可以设为仅 init(私有可访问性) | |
将本地函数放在 'return' 或 'continue' 之后 | |
多余的 'is' | |
移除构造函数调用 | |
移除多余语句 | |
移除多余语句 | |
移除 ToList() | |
移除 ToList() | |
将 'async' 代码替换为返回 'Task' | |
替换为 FirstOrDefault($args$) | |
替换为 FirstOrDefault($args$) | |
替换为 FirstOrDefault($args$) | |
替换为 FirstOrDefault($args$) | |
替换为 LastOrDefault($args$) | |
替换为 LastOrDefault($args$) | |
替换为 LastOrDefault($args$) | |
替换为 LastOrDefault($args$) | |
替换为 OfType<T>() | |
替换为 OfType<T>() | |
替换为 OfType<T>() | |
替换为 OfType<T>().Any() | |
替换为 OfType<T>().Any()(替换为 OfType<T>().Any(..)) | |
替换为 OfType<T>().Count() | |
替换为 OfType<T>().Count()(替换为 OfType<T>().Count(..)) | |
替换为 OfType<T>().First() | |
替换为 OfType<T>().First()(替换为 OfType<T>().First(..)) | |
替换为 OfType<T>().FirstOrDefault() | |
替换为 OfType<T>().FirstOrDefault()(替换为 OfType<T>().FirstOrDefault(..)) | |
替换为 OfType<T>().Last() | |
替换为 OfType<T>().Last()(替换为 OfType<T>().Last(..)) | |
替换为 OfType<T>().LastOrDefault() | |
替换为 OfType<T>().LastOrDefault()(替换为 OfType<T>().LastOrDefault(..)) | |
替换为 OfType<T>().LongCount() | |
替换为 OfType<T>().Single() | |
替换为 OfType<T>().Single()(替换为 OfType<T>().Single(..)) | |
替换为 OfType<T>().SingleOrDefault() | |
替换为 OfType<T>().SingleOrDefault()(替换为 OfType<T>().SingleOrDefault(..)) | |
替换为 OfType<T>().Where()(替换为 OfType<T>().Where(..)) | |
替换为简单赋值 | |
替换为简单赋值 | |
替换为单次赋值 | |
替换为单次赋值 | |
替换为单次调用 Any(..) | |
替换为单次调用 Count(..) | |
替换为单次调用 First(..) | |
替换为单次调用 FirstOrDefault(..) | |
替换为单次调用 Last(..) | |
替换为单次调用 LastOrDefault(..) | |
替换为单次调用 Single(..) | |
替换为单次调用 SingleOrDefault(..) | |
替换为 SingleOrDefault($args$) | |
替换为 SingleOrDefault($args$) | |
替换为 SingleOrDefault($args$) | |
替换为 SingleOrDefault($args$) | |
返回类型可以是 IEnumerable<T>(非私有可访问性) | |
返回类型可以是 IEnumerable<T>(私有可访问性) | |
简化条件三元表达式 | |
简化 'IsInstanceOfType()' 调用 | |
简化 LINQ 表达式(使用 'All') | |
简化 LINQ 表达式(使用 'Any') | |
简化取反模式 | |
简化取反关系模式 | |
简化负等式表达式 | |
显式指定字符串比较 | |
显式指定字符串区域性 | |
字符串字面量可内联 | |
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 语句可以合并 | |
类型可设为文件级本地类型 | |
类型参数可声明为协变或逆变 | |
具有可疑相等性的类型用于记录(非私有可访问性) | |
具有可疑相等性的类型用于记录(私有可访问性) | |
使用默认结构体相等性 | |
使用 'ArgumentNullException.ThrowIfNull' | |
使用数组创建表达式 | |
使用数组创建表达式 | |
使用 'Array.Empty<T>()' | |
使用取消令牌 | |
使用编译器支持的可空属性 | |
使用 'EventArgs.Empty' | |
使用索引属性 | |
使用 'is' 运算符 | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用方法 Any() | |
使用 'String.IsNullOrEmpty' | |
使用 'Type.EmptyTypes' |
编译器警告(212 项检查)
此类别中的检查可在编译之前检测到 compiler warnings。
'#warning' 指令 | |
[InterpolatedStringHandlerArgument] 应用于 lambda 参数时无效,将在调用处被忽略。 | |
为 'ref readonly' 参数指定了默认值,但 'ref readonly' 仅应用于引用类型。 建议将参数声明为 'in'。 | |
局部变量以引用方式返回,但其初始化值无法以引用方式返回。 | |
变量的成员以引用方式返回,但其初始化值无法以引用方式返回 | |
标记为 [DoesNotReturn] 的方法不应有返回值。 | |
可能的 null 值不应用于带有 [NotNull] 或 [DisallowNull] 标记的类型。 | |
前面的 catch 子句已捕获所有异常 | |
在此上下文中 stackalloc 表达式的结果可能会暴露到包含方法之外。 | |
日志消息中的模板在日志方法定义中没有对应的参数 | |
类型为 'System.Threading.Lock' 的值被转换为其他类型时,在 'lock' 语句中将使用可能非预期的基于监视器的锁定机制 | |
通过 'base' 关键字从匿名方法、lambda 表达式、查询表达式或迭代器访问成员会导致代码无法验证 | |
对齐值 'value' 的数量级大于 'magnitude limit',可能导致格式化字符串过大。 | |
XML 注释中存在歧义引用 | |
由于引用类型的可空性不同,参数无法作为输出用于该参数。 | |
由于引用类型的可空性不同,参数无法用于对应的参数。 | |
参数应为变量,因为其被传递给 'ref readonly' 参数。 | |
参数应使用 'in' 关键字传递。 | |
条件表达式中的赋值 | |
对同一变量进行了赋值 | |
异步函数未包含 await 表达式 | |
异步方法调用未包含 await 表达式 | |
异步 'Main' 方法不会被用作入口点,因为已找到同步入口点。 | |
异步迭代器包含一个或多个类型为 'CancellationToken' 的参数,但均未使用 'EnumeratorCancellation' 属性进行标注。 | |
'attribute modifier' 不是有效的属性位置。 此代码块中的所有属性都将被忽略 | |
'attribute modifier' 对于此声明不是有效的属性位置。 此代码块中的所有属性都将被忽略 | |
包含注释文件中的 XML 格式错误 | |
对符号扩展操作数使用按位或运算符。 | |
从 'readonly' 成员调用非 readonly 成员会导致 'this' 被隐式复制 | |
无法将 null 字面量转换为非可空引用类型。 | |
无法解析 XML 注释中的引用 | |
类重写了 Object.Equals(object o) 但未重写 Object.GetHashCode() | |
代码不可达 | |
集合表达式可能导致意外的堆分配 | |
集合表达式因使用 '..' 展开可能导致意外的堆分配 | |
与可空值类型的 null 比较始终为 'false' | |
与整型常量的比较无意义;该常量超出了类型 'type' 的取值范围。 | |
将方法组转换为非委托类型 'object'. | |
将 null 字面量或可能为 null 的值转换为非可空类型。 | |
在 sealed 类中声明新的 protected 成员等同于声明为 private | |
为参数指定的默认值无效,因为其应用于在不允许可选参数的上下文中使用的成员 | |
对可能为 null 的引用进行解引用。 | |
XML 注释中存在重复的 param 标签 | |
XML 注释中存在重复的 typeparam 标签 | |
空的 switch 代码块 | |
字段从未使用 | |
筛选表达式为常量,建议移除筛选条件 | |
给定表达式始终匹配所提供的模式 | |
给定表达式始终为所提供的类型 | |
给定表达式从不是所提供的类型 | |
'goto case' 的值无法隐式转换为所需类型 | |
在语言版本预览中,'field' 关键字绑定到属性的合成后备字段 | |
XML 注释中的签名不正确 | |
错误使用 ConstantExpected 属性 | |
内联数组转换运算符不会用于从声明类型的表达式进行转换。 | |
内联数组索引器不会用于元素访问表达式。 | |
内联数组 'Slice' 方法不会用于元素访问表达式。 | |
对于元素字段为 'ref' 字段或类型不适合作为类型参数的内联数组类型,不支持 'Inline arrays' 语言特性。 | |
引入 'Finalize' 方法可能会干扰析构函数的调用 | |
XML 注释中包含无效的 XML | |
XML 注释中包含无效的 include 元素 | |
'new' 关键字是多余的 | |
需要 'new' 关键字 | |
成员不能在此属性中使用。 | |
成员在函数退出时必须有条件地为非 null 值。 | |
成员在退出时必须为非 null 值。 | |
成员重写了已过时的成员 | |
方法缺少 '[DoesNotReturn]' 注解,无法与实现或重写的成员匹配。 | |
公开可见类型或成员缺少 XML 注释 | |
运行时存在多个重写候选项 | |
发现多个同名 Shader | |
命名空间应为此项目的默认命名空间 | |
未访问的字段 | |
未访问的局部变量 | |
非可空后备字段未初始化。 | |
非可空成员未初始化。 | |
类型参数约束中的可空性不匹配。 | |
显式接口说明符中的引用类型可空性与类型实现的接口不匹配。 | |
基类实现的接口中的引用类型可空性不匹配。 | |
返回类型中的引用类型可空性与实现的成员不匹配。 | |
返回类型中的引用类型可空性与隐式实现的成员不匹配。 | |
返回类型中的引用类型可空性与重写的成员不匹配。 | |
返回类型中的引用类型可空性与 partial 方法声明不匹配。 | |
返回类型中的引用类型可空性与目标委托不匹配(可能由于可空性属性所致)。 | |
拦截器方法中返回类型的引用类型可空性与可拦截方法不匹配 | |
源类型中的引用类型可空性与目标类型不匹配。 | |
类型中的引用类型可空性与实现的成员不匹配。 | |
类型中的引用类型可空性与隐式实现的成员不匹配。 | |
类型中的引用类型可空性与重写的成员不匹配。 | |
参数类型中的引用类型可空性与目标委托不匹配(可能由于可空性属性所致)。 | |
参数类型中的引用类型可空性与实现的成员不匹配。 | |
参数类型中的引用类型可空性与隐式实现的成员不匹配。 | |
参数类型中的引用类型可空性与可拦截方法不匹配 | |
参数类型中的引用类型可空性与重写的成员不匹配。 | |
参数类型中的引用类型可空性与 partial 成员声明不匹配。 | |
返回类型的可空性与实现的成员不匹配(可能由于可空性属性所致)。 | |
返回类型的可空性与隐式实现的成员不匹配(可能由于可空性属性所致)。 | |
返回类型的可空性与重写的成员不匹配(可能由于可空性属性所致)。 | |
类型参数的可空性与 'class' 约束不匹配。 | |
类型参数的可空性与约束类型不匹配。 | |
类型参数的可空性与 'notnull' 约束不匹配。 | |
参数类型的可空性与实现的成员不匹配(可能由于可空性属性所致)。 | |
参数类型的可空性与隐式实现的成员不匹配(可能由于可空性属性所致)。 | |
参数类型的可空性与重写的成员不匹配(可能由于可空性属性所致)。 | |
可空值类型可能为 null。 | |
对象或集合初始化器隐式解引用了可能为 null 的成员。 | |
过时成员重写了非过时成员 | |
不应强制要求过时成员。 | |
'==' 或 '!=' 运算符未重写 'Object.Equals(object o)' 和 'Object.GetHashCode()' | |
在使用预览功能前请先选择加入。 | |
参数在 XML 注释中没有匹配的 param 标签 | |
参数在 lambda 中有 params 修饰符,但目标委托类型中没有。 | |
参数被捕获到封闭类型的状态中,其值也会传递给基类构造函数。 该值也可能被基类捕获。 | |
参数被捕获到封闭类型的状态中,其值还用于初始化字段、属性或事件。 | |
函数退出时参数必须有条件地为非 null 值。 | |
由于 [NotNullIfNotNull] 注解中提及的参数为非 null,函数退出时参数必须为非 null 值。 | |
函数退出时参数必须为非 null 值。 | |
参数在参数列表中位于插值字符串处理程序参数之后。 | |
Partial 成员声明的签名不一致。 | |
partial 方法声明的类型参数可空性不一致。 | |
可能误用的空语句 | |
参数可能为 null 的引用类型参数。 | |
可能为 null 的引用类型赋值。 | |
可能为 null 的引用类型返回值。 | |
可能为非预期的引用比较 | |
对作为 'using' 或 'lock' 语句参数的局部变量可能赋值不正确 | |
主构造函数参数被基类成员遮蔽。 | |
record 定义了 'Equals' 但未定义 'GetHashCode' | |
参数的引用类型修饰符与被隐藏成员中的对应参数不匹配。 | |
参数的引用类型修饰符与重写或实现成员中的对应参数不匹配。 | |
参数的引用类型修饰符与目标中的对应参数不匹配。 | |
对 volatile 字段的引用不会被视为 volatile | |
由于 [NotNullIfNotNull] 注解中提及的参数为非 null,返回值必须为非 null。 | |
Signatures of interceptable and interceptor methods do not match | |
Source file has exceeded the limit of 16,707,565 lines representable in the PDB; debug information will be incorrect | |
Static type in 'is' or 'as' operator. | |
Struct member returns 'this' or other instance members by reference. | |
XML 注释中的语法错误 | |
Taking address of marshal-by-reference class field | |
模板应是静态表达式 | |
The '&' operator should not be used on parameters or local variables in async methods. | |
The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. | |
可空引用类型的注解应仅在 '#nullable' 注解上下文中的代码中使用。 自动生成的代码需要在源文件中显式添加 '#nullable' 指令。 | |
The branches of the ref conditional operator refer to variables with incompatible declaration scopes. | |
应用于参数的 CallerArgumentExpressionAttribute 无效,因为它是自引用的 | |
The CallerArgumentExpressionAttribute is applied with an invalid parameter name. | |
The CallerArgumentExpressionAttribute will have no effect because it applies to a member that is used in contexts that do not allow optional arguments | |
The CallerArgumentExpressionAttribute will have no effect; it is overridden by the CallerFilePathAttribute | |
The CallerArgumentExpressionAttribute will have no effect; it is overridden by the CallerLineNumberAttribute | |
The CallerArgumentExpressionAttribute will have no effect; it is overridden by the CallerMemberNameAttribute | |
CallerFilePathAttribute 将无效;其被 CallerLineNumberAttribute 覆盖 | |
CallerFilePathAttribute 将无效,因为其应用于不允许可选参数的上下文中使用的成员 | |
CallerLineNumberAttribute 将无效,因为其应用于不允许可选参数的上下文中使用的成员 | |
CallerMemberNameAttribute 将无效,因为其应用于不允许可选参数的上下文中使用的成员 | |
CallerMemberNameAttribute 将无效;其被 CallerFilePathAttribute 覆盖 | |
CallerMemberNameAttribute 将无效;其被 CallerLineNumberAttribute 覆盖 | |
The default parameter value does not match in the target delegate type. | |
The 'EnumeratorCancellation' attribute is only effective on a parameter of type 'CancellationToken' in an async-iterator method returning 'IAsyncEnumerable<>'. | |
The given expression always matches the provided constant. | |
The given expression never matches the provided pattern. | |
'l' 后缀容易与数字 '1' 混淆 | |
The 'Main' method will not be used as an entry point because compilation unit with top-level statements was found. | |
该参数期望为常量,以获得最佳性能 | |
与 'in' 参数对应的参数使用 'ref' 修饰符等同于 'in'。 建议改用 'in'。 | |
与 'in' 参数对应的参数使用 'ref' 修饰符等同于 'in'。 建议改用 'in'。 | |
该表达式的结果始终为可空类型的 'null' | |
该表达式的结果始终为 'true' 或 'false',因为值类型的值永远不等于 'null' | |
该表达式的结果始终为 'true' 或 'false',因为值类型的值永远不等于 'null' | |
参数的 'scoped' 修饰符与目标委托不匹配。 | |
参数的 'scoped' 修饰符与重写或实现的成员不匹配。 | |
switch 表达式未处理所有可能的输入(不完整)。 | |
switch 表达式未处理其输入类型的所有可能值(不完整)。 不过,带有 'when' 子句的模式可能会成功匹配该值。 | |
switch 表达式未处理部分 null 输入(不完整)。 | |
switch 表达式未处理部分 null 输入(不完整)。 不过,带有 'when' 子句的模式可能会成功匹配该值。 | |
switch 表达式未处理输入类型的部分值(不完整),涉及未命名的枚举值。 | |
元组元素名称被忽略,因为目标类型指定了不同的名称或未指定名称。 | |
元组 == 或 != 运算符另一侧指定了不同的名称或未指定名称,因此元组元素名称被忽略。 | |
类型名称仅包含小写 ASCII 字符。 此类名称可能会被语言保留 | |
partial 结构体的多次声明之间字段没有定义顺序。 如需指定顺序,所有实例字段必须在同一声明中。 | |
此 ref 赋值的值只能通过 return 语句从当前方法中逸出。 | |
此 ref 赋值的值的逸出范围比目标更宽,允许通过目标赋值更窄逸出范围的值。 | |
此 ref 赋值将表达式赋给了逸出范围更窄的变量。 | |
此操作通过引用返回了局部变量的成员,但该变量不是 ref 局部变量。 | |
此操作通过引用返回了参数,但该参数不是 ref 参数。 | |
此操作通过引用返回了参数,但其作用域仅限于当前方法。 | |
此操作通过 ref 参数引用返回了参数,但只能在 return 语句中安全返回。 | |
此操作通过引用返回了参数的成员,但该参数不是 ref 或 out 参数。 | |
此操作通过引用返回了作用域仅限于当前方法的参数成员。 | |
此操作通过 ref 参数引用返回了参数的成员,但只能在 return 语句中安全返回。 | |
此操作通过引用返回了局部变量,但该变量不是 ref 局部变量。 | |
此操作对托管类型取地址、获取大小或声明指针。 | |
抛出的值可能为 null。 | |
类型已在接口列表中列出,但引用类型的可空性不同。 | |
该类型仅用于评估目的,未来更新中可能会更改或移除。 | |
此类型仅用于评估目的,可能会在未来更新中更改或移除。 抑制此诊断以继续。 | |
类型参数在 XML 注释中没有匹配的 typeparam 标签 | |
类型参数与外部类型的类型参数同名 | |
类型及别名不应命名为 'record' | |
无法包含 XML 片段 | |
未分配的字段 | |
未分配的 readonly 字段 | |
对可能为 null 的值进行拆箱。 | |
未解析的 Shader 名称 | |
未使用的局部变量 | |
在此上下文中使用变量可能会导致引用的变量暴露到其声明作用域之外。 | |
使用了已过时的符号 | |
使用了已过时的符号(无消息) | |
使用 'is' 测试与 'dynamic' 的兼容性本质上等同于测试与 'Object' 的兼容性,并且对所有非 null 值都成立 | |
XML 注释中存在 'Parameter' 的 param 标签,但没有该名称的参数 | |
XML 注释中存在 'TypeParameter' 的 typeparam 标签,但没有该名称的类型参数 | |
XML 注释的 cref 属性引用了类型参数 | |
XML 注释未放置在有效的语言元素上 |
约束违规(11 项检查)
此类别包括代码检查,主要具有 警告严重性级别,用于检测与符号属性相关的违规行为,包括 ReSharper 的代码注解及其他类似问题。
需要基类类型 | |
BaseTypeRequired 属性仅支持类和接口 | |
命名不一致 | |
命名空间与文件位置不对应 | |
非可空或必需成员在构造函数退出时未初始化 | |
可能将 'null' 分配给非空实体 | |
可能违反 'ValueRange'/'NonNegativeValue' 属性 | |
契约注解定义存在问题 | |
所需基类类型与其他类型冲突 | |
'[BaseTypeRequired]' 属性中指定的类型与其他类型冲突 | |
带有 'CannotApplyEqualityOperatorAttribute' 标记的类型值应使用 'Equals()' 进行比较 |
Entity Framework(8 项检查)
本类别分组的代码检查用于校验 Entity Framework 及其派生类型的类型和成员的用法。
数据库函数不得在非数据库上下文中调用 | |
函数无法转换为 SQL,且不得在数据库上下文中调用 | |
可能对数据库发起多次查询(N+1 问题) | |
对相关实体可能发起多次数据库查询(N+1 问题) | |
字符串长度无限制可能导致性能问题 | |
查询可能返回相关实体的不完整数据 | |
此属性定义的关系导致依赖循环 | |
导航属性的使用可能返回不完整数据 |
格式化(41 项检查)
此类别中的检查 检测代码格式问题。
空行不正确(其他位置缺少空行) | |
空行不正确(其他位置空行多余) | |
空行不正确(大括号附近空行数不正确) | |
缩进不正确(子语句周围) | |
缩进不正确(声明大括号周围) | |
缩进不正确(表达式大括号周围) | |
缩进不正确(命名空间大括号周围) | |
缩进不正确(预处理指令周围) | |
缩进不正确(语句大括号周围) | |
缩进不正确(switch 语句周围) | |
缩进不正确(缩进大小不正确) | |
缩进不正确(缩进级别未恢复) | |
缩进不正确(其他位置缺少缩进/取消缩进) | |
缩进不正确(其他位置缩进/取消缩进多余) | |
缩进不正确(制表符/空格不匹配) | |
换行不正确(列表中逗号周围) | |
换行不正确(声明大括号周围) | |
换行不正确(空大括号周围) | |
换行不正确(表达式大括号周围) | |
换行不正确(LINQ 查询周围) | |
换行不正确(括号周围) | |
换行不正确(语句大括号周围) | |
换行不正确(其他位置缺少换行) | |
换行符不正确(其他位置换行符多余) | |
换行不正确(一行有多条语句) | |
换行不正确(一行有多个类型成员) | |
空格不正确(属性周围) | |
空格使用不正确(大括号周围) | |
空格使用不正确(冒号周围) | |
空格使用不正确(逗号周围) | |
空格不正确(泛型括号周围) | |
空格使用不正确(成员访问符号周围) | |
空格使用不正确(运算符符号周围) | |
空格使用不正确(括号周围) | |
空格使用不正确(分号周围) | |
空格使用不正确(语句内方括号周围) | |
空格使用不正确(关键字与括号之间) | |
空格使用不正确(禁止多个空格) | |
空格使用不正确(其他位置缺少空格) | |
空格使用不正确(其他位置空格多余) | |
空格不正确(此处禁止使用制表符) |
语法问题(4 项检查)
此类别中的检查会报告字符串字面量和文档注释中的 语法问题。
注释中的语法错误 | |
标记属性值中的语法错误 | |
标记文本中的语法错误 | |
字符串字面量中的语法错误 |
语言使用机会(85 项检查)
此类别包括代码检查,主要具有 建议 严重性级别,通知您可以使用更高级的语言结构。 这些检查会检测过时语言版本的语法,并建议使用更现代语言版本的功能。 对于大多数支持的语言,语言版本 可以自动检测或手动设置。
追加到集合表达式 | |
类无法实例化 | |
条件表达式可重写为 null 合并运算 | |
将 'as' 表达式类型检查及后续 null 检查转换为取反模式匹配 | |
将 'as' 表达式类型检查及后续 null 检查转换为模式匹配 | |
将构造函数转换为成员初始化器 | |
将构造函数转换为主构造函数 | |
将委托变量转换为局部函数 | |
将 'if' 语句转换为 'switch' | |
转换为 'await using' 语句或声明 | |
转换为 lambda 表达式 | |
转换为静态类 | |
转换为 'using' 声明 | |
将 lambda 表达式转换为方法组 | |
将取反的 'is' 表达式转换为带取反模式的 'is' 表达式 | |
将 'Nullable<T>' 转换为 'T?' | |
将属性转换为自动属性 | |
将属性转换为自动属性(如可行) | |
将属性转换为带 private setter 的自动属性 | |
将静态方法调用转换为扩展方法调用 | |
Foreach 循环可以转换为 LINQ 表达式,但将使用另一个 'GetEnumerator' 方法 | |
For 循环可转换为 foreach 循环 | |
'if' 语句可重写为 '?:' 表达式 | |
'if' 语句可重写为 '??' 表达式 | |
'if' 语句可重写为 '??=' 赋值 | |
'if-return' 语句可重写为 'return' 语句 | |
内联 'out' 变量声明 | |
内联临时变量 | |
引入可选参数(非 private 可访问性) | |
引入可选参数(private 可访问性) | |
反转 'if' 语句以减少嵌套 | |
合并 null 检查与赋值 | |
Lambda 表达式/匿名方法可设为 'static' | |
Lambda 表达式/匿名方法必须为 'static' 以避免分配 | |
Lambda 表达式/匿名方法不得捕获包含上下文 | |
可通过使用逐字字符串减少字面量长度 | |
循环可以转换为 LINQ 表达式 | |
合并 'and' 模式 | |
将条件 ?: 表达式合并为条件访问 | |
将取反的 null/模式检查合并为复杂模式 | |
合并嵌套属性模式 | |
将 null/模式检查合并为复杂模式 | |
将 null/模式/值检查合并为 'or'/'and' 模式 | |
将顺序检查合并为单个条件访问检查 | |
移至现有的位置解构模式 | |
将变量声明移至循环条件内 | |
Foreach 循环的一部分可以转换为 LINQ 表达式,但将使用另一个 'GetEnumerator' 方法 | |
循环体的一部分可以转换为 LINQ 表达式 | |
传递字符串插值表达式 | |
多余的访问器主体 | |
多余的展开元素 | |
用计算属性替换自动属性 | |
用 null 传播代码替换 if 语句 | |
将未执行额外检查的对象模式替换为 'var' 模式 | |
用常量模式替换 'SequenceEqual' | |
用区间索引器替换 'Slice' | |
用区间索引器替换 'Substring' | |
用 'switch' 表达式替换 'switch' 语句 | |
用 'switch' 表达式替换三元表达式 | |
替换为 'field' 关键字 | |
替换为主构造函数参数 | |
使用别名 | |
使用集合表达式语法 | |
使用复合赋值 | |
使用复合赋值 | |
使用解构 | |
使用解构交换变量 | |
使用丢弃赋值 | |
使用末尾索引表达式 | |
使用 'nameof' 表达式引用枚举成员名 | |
使用 'nameof' 表达式引用名称 | |
在字符串字面量部分使用 'nameof' 表达式引用名称 | |
使用 'nameof' 表达式引用类型名 | |
注册 DependencyProperty 时使用 'nameof' 表达式 | |
尽可能使用对象或集合初始化器 | |
使用位置解构模式 | |
使用原始字符串 | |
使用字符串插值表达式 | |
使用类型注解语法 | |
使用无符号右移运算符 '>>> ' | |
使用 UTF-8 字符串字面量 | |
使用 'with' 表达式复制匿名对象 | |
使用 'with' 表达式复制 record | |
使用 'with' 表达式复制结构体 | |
使用 'with' 表达式复制元组 |
NUnit(30 项检查)
这些检查会检测与 NUnit 测试相关的代码问题。
NUnit。 Async test method must return Task or Task<T> | |
NUnit。 存在重复值。 | |
NUnit。 参数属性被忽略。 | |
NUnit。 隐式未指定的 null 值。 | |
NUnit。 参数类型不兼容或参数值不正确。 | |
NUnit。 期望结果类型不兼容或值不正确。 | |
NUnit。 范围边界不正确。 'to' 必须大于或等于 'from'。 | |
NUnit。 区间步长符号不匹配。 | |
NUnit。 TestCase 属性中缺少参数。 | |
NUnit。 测试方法声明缺少 'CancelAfter' 属性。 | |
NUnit。 非 void 测试方法缺少期望结果。 | |
NUnit。 属性中未提供任何值。 | |
NUnit。 测试方法非公开。 | |
NUnit。 区间 'step' 参数值必须为非零。 | |
NUnit。 TestCase 属性中存在多余参数。 | |
NUnit。 存在多余参数,建议使用 ExpectedResult。 | |
NUnit。 void 测试方法存在多余的期望结果。 | |
NUnit。 指定的属性值生成的测试用例过多。 | |
NUnit。 指定的值与测试参数类型不兼容。 | |
NUnit。 测试用例 Result 属性与 ExpectedResult 重复。 | |
NUnit。 测试用例 Result 属性已过时。 | |
NUnit。 测试用例源必须为字段、属性或方法。 | |
NUnit。 测试用例源必须为非抽象类型并实现 IEnumerable。 | |
NUnit。 测试用例源必须为静态成员。 | |
NUnit。 以当前步长无法达到最大区间值。 | |
NUnit。 未为测试方法参数提供值。 | |
NUnit。 区间内的值不适用于测试参数类型。 | |
NUnit.AutoFixture。 参数类型不兼容或参数值不正确。 | |
NUnit.AutoFixture。 缺少 Test 或 TestFixture 属性。 | |
NUnit.AutoFixture。 InlineAutoData 属性中存在多余参数。 |
潜在代码质量问题(222 项检查)
此类别包括检测关键问题(代码异味)的检查,主要具有 错误 或 警告 级别。 此类别还包括 确保本地化支持的检查。
'?:' 表达式的 true 和 false 分支相同 | |
[MustDisposeResource] 注解不会从基类构造函数继承,需显式添加 | |
[ThreadStatic] 不适用于实例字段 | |
被抑制的可空性警告可能隐藏潜在问题 | |
抽象或虚拟(可重写)事件从未被调用 | |
访问已释放的捕获变量 | |
在闭包中访问 foreach 变量 | |
访问已修改的捕获变量 | |
根据位掩码的值,表达式结果始终相同 | |
实际移位数为零 | |
文本参数中存在歧义符号 | |
层次结构中的注解冲突 | |
条件表达式中的赋值 | |
异步迭代器调用未使用 'await foreach' | |
自动属性访问器从未使用(非私有可访问性) | |
自动属性访问器从未使用(私有可访问性) | |
避免混用变长转义序列与文本 | |
避免对返回类型为 'void' 且具有 'System.EventArgs' 类型参数的方法和函数使用 'async' | |
避免对返回类型为 'void' 且没有 'System.EventArgs' 类型参数的方法和函数使用 'async' | |
避免在委托类型返回 'void' 时使用 'async' lambda | |
后备字段已赋值但从未被使用 | |
后备字段被使用但从未赋值 | |
对未标记 [Flags] 属性的枚举进行按位操作 | |
调用具有隐式默认参数的基成员 | |
调用 'base.Equals(...)' 是引用相等 | |
文本参数中无法访问静态符号 | |
文本参数中无法访问符号 | |
无法解析属性 | |
无法解析资源 | |
无法解析资源项 | |
无法解析文本参数中的符号 | |
捕获 marshal-by-reference 类的字段引用可能导致运行时异常 | |
捕获的主构造函数参数是可变的 | |
捕获的对 'volatile' 字段的引用不会被视为 'volatile' | |
Char 可能被无意中当作整数使用 | |
类从未被实例化(非私有可访问性) | |
类从未被实例化(私有可访问性) | |
集合内容从未被查询(非私有可访问性) | |
集合内容从未被查询(私有可访问性) | |
集合从未被更新(非私有可访问性) | |
集合从未被更新(私有可访问性) | |
冲突的 CQRS 属性 | |
常量移位表达式的操作数均非零但结果为零 | |
协变数组转换 | |
CQRS 上下文交叉。 Command 从 Query 上下文中调用。 (显示在声明中) | |
CQRS 上下文交叉。 Command 从 Query 上下文中调用。 (显示在用法中) | |
CQRS 上下文交叉。 Query 从 Command 上下文中调用。 (显示在声明中) | |
CQRS 上下文交叉。 Query 从 Command 上下文中调用。 (显示在用法中) | |
已被 'using' 语句捕获的变量被释放 | |
至少有一条执行路径存在除零操作 | |
请勿在 'async void' 方法和函数中重新抛出异常 | |
请勿将 SpinLock 存储在 readonly 字段中 | |
请勿对 'using' 变量使用对象初始化器 | |
请勿对 'using' 变量使用对象初始化器(对象初始化器表达式在初始化 'using' 变量时可能抛出异常) | |
在格式字符串中格式说明符后不要使用右大括号 | |
字典/集合初始化中存在重复键 | |
链式 'if' 分支重复 | |
顺序 'if' 分支重复 | |
重复的 'switch' 分支项 | |
重复的 'switch' 分支体 | |
元素是可本地化的 | |
空的通用 catch 子句 | |
空的 'with' 表达式是多余的 | |
在显式 unchecked 上下文中调用 'Enumerable.Sum' | |
浮点数的相等性比较 | |
转义序列可简化 | |
事件从未被订阅(非私有可访问性) | |
事件从未被订阅(私有可访问性) | |
事件从未被调用 | |
通过匿名委托取消事件订阅 | |
可能是有意的异常重新抛出 | |
显式参数传递给带有调用者信息属性的参数 | |
提取通用代码 | |
字段隐藏了接口中具有默认实现的属性 | |
已指定格式,但插值字符串表达式不是 IFormattable | |
函数体过于复杂,无法分析 | |
所有执行路径上函数均为递归调用 | |
函数从未返回 | |
调用 'GC.SuppressFinalize' 的类型没有析构函数 | |
根据整数分析,分支不可达 | |
根据整数分析,switch 分支不可达 | |
传递给 'Math.Clamp()' 方法的参数不一致 | |
加锁顺序不一致 | |
字段上的同步操作不一致 | |
末尾索引必须大于零;使用 '^1' 表示最后一个元素 | |
标记为 ServiceContract 的接口应至少声明一个 OperationContract | |
无效的 XML 文档注释 | |
多态字段式事件的调用 | |
IQueryable 可能被无意中当作 IEnumerable 使用 | |
迭代器从未返回 | |
局部函数隐藏了方法 | |
局部变量隐藏了成员 | |
局部变量隐藏了主构造函数参数 | |
循环控制变量在循环内未被更改 | |
对输出参数使用 [HandlesResourceDisposal] 注解无意义 | |
对输入参数使用 [MustDisposeResource] 注解无意义 | |
成员隐藏了外部类的静态成员 | |
成员初始化值被忽略 | |
方法从两个 CQRS 上下文中被调用(显示在声明中) | |
方法从两个 CQRS 上下文中被调用(显示在用法中) | |
方法已标记为 OperationContract,但其所属类型未标记为 ServiceContract | |
带有可选或 'params' 参数的方法被重载隐藏 | |
重写方法中的可选参数值不匹配 | |
库代码中的异步可释放对象缺少 '.ConfigureAwait(false)' | |
库代码中缺少 '.ConfigureAwait(false)' | |
请将 shebang 指令移动到文件开头 | |
多次连续调用 'OrderBy' | |
未访问的字段(非私有可访问性) | |
未访问的字段(私有可访问性) | |
未访问的位置属性(非私有可访问性) | |
未访问的位置属性(私有可访问性) | |
实现类中的非公开成员隐藏了接口中的默认实现 | |
在 'GetHashCode()' 中引用的非 readonly 类型成员 | |
可空性与层级结构中的注解冲突 | |
可空性警告抑制运算符可能与取反的 'is' 表达式混淆 | |
'Object.ReferenceEquals' 始终为 false,因为它是用值类型调用的 | |
单向操作不得返回值 | |
可以使用运算符 'is'/'Type Of ... Is ...' | |
运算符未提供匹配的 checked 运算符 | |
重写的 GetHashCode 调用了基类 'Object.GetHashCode()' | |
参数隐藏了成员 | |
参数隐藏了主构造函数参数 | |
partial 成员声明中的参数名称不同 | |
通过接口访问成员时可能存在歧义 | |
值类型与 'null' 的比较可能无意义 | |
可能存在循环构造函数调用 | |
可能的双重检查锁定模式的错误实现。 可能对检查字段的多次写访问。 | |
可能的双重检查锁定模式的错误实现。 对检查字段的读取访问。 | |
可能的无限继承 | |
可能丢失小数部分 | |
可能错误地传递了类型为 'System.Type' 的参数 | |
可能错误调用了 'GetType()' | |
可能的多次枚举 | |
可能溢出 | |
在 checked 上下文中可能溢出 | |
在 unchecked 上下文中可能溢出 | |
可能抛出 'System.ArgumentOutOfRangeException'。 索引必须为非负整数。 | |
可能抛出 'System.ArgumentOutOfRangeException'。 起始索引必须小于或等于结束索引。 | |
可能抛出 'System.InvalidCastException' | |
在 foreach 循环中可能抛出 'System.InvalidCastException' | |
可能抛出 'System.InvalidOperationException' | |
可能抛出 'System.InvalidOperationException: Collection was modified' | |
可能抛出 'System.NullReferenceException' | |
通过 'new' 表达式创建的对象可能未被赋值 | |
可能为非预期的引用比较 | |
可能在 readonly 变量上调用非纯结构体方法:结构体值在调用前始终被复制 | |
使用 'DefaultValueAttribute' 定义可选参数值可能具有误导性 | |
索引器初始化器前可能缺少逗号 | |
可能错误使用了 'CancellationToken' | |
集合中可能为非预期的线性查找 | |
条件调用中可能为非预期的修改 | |
可能为非预期的字符串插值而非格式字符串模板 | |
字符串比较可能有误:仅当 span 指向同一内存位置时才相等 | |
lambda 或局部函数中的参数名可能具有误导性 | |
建议显式提供元组组件名称 | |
禁止捕获主构造函数参数 | |
带 [Optional] 属性的 'ref' 或 'out' 参数 | |
返回由 'using' 捕获对象生成的 task | |
返回被 'using' 语句捕获的变量 | |
函数的返回类型可设为非可空类型 | |
带有 [MustUseReturnValue] 注解的方法的返回值未被使用 | |
带有 [MustDisposeResource] 注解的方法的返回值从未被释放 | |
属性的返回值必须由调用方释放 | |
'GetEnumerator' 方法调用的返回值从未被释放 | |
迭代器的返回值未被使用 | |
纯方法的返回值未被使用 | |
返回值应被释放,但方法或函数未加 [MustDisposeResource] 注解 | |
安全类型转换表达式始终成功 | |
左操作数为零的移位表达式结果为零 | |
附近检测到相似的匿名类型 | |
相似表达式比较 | |
枚举的部分值未在 'switch' 表达式中处理,而是在默认分支通过异常处理 | |
枚举的部分值未在 'switch' 语句中处理 | |
枚举的部分值未在 'switch' 语句中处理,而是在默认分支处理 | |
泛型类型中的静态字段或自动属性 | |
静态成员初始化器引用了下面或其他部分的静态成员 | |
字符串格式化方法问题 | |
结构化日志消息项重复或仅大小写不同 | |
结构化消息模板问题 | |
对同步原语加锁可疑 | |
ArgumentNullException 中的参数名可疑 | |
此类型左操作数的移位数可疑 | |
可疑的类型转换或检查 | |
使用类似丢弃名称的变量可疑 | |
可疑的 'volatile' 字段用法:复合操作不是原子的。 可改用 'Interlocked' 类。 | |
模块中可能在运行时缺失的符号 | |
尾递归调用可替换为循环 | |
'is' 运算符的表达式从不是所提供的类型 | |
'is' 运算符的给定表达式始终为所提供的类型 | |
该模式是多余的,不会产生任何运行时检查 | |
源表达式始终匹配所提供的模式 | |
源表达式从不匹配所提供的模式 | |
线程静态字段具有初始化器 | |
可用类型检查替换类型转换及 null 检查 | |
类型检查和强制转换可以合并 | |
类型模式与类型转换可合并 | |
未分配的字段(非私有可访问性) | |
未分配的字段(私有可访问性) | |
未分配的 readonly 字段 | |
未识别的 CQRS 实体 | |
未知的 Razor 布局 | |
未知的 Razor 区段 | |
<inheritdoc /> 的用法无效 | |
Use <inheritdoc /> on root level to inherit documentation from base candidate | |
Use collection's count property | |
在格式字符串中使用格式说明符 | |
Use format specifier in interpolated strings | |
Use null check instead of a type check succeeding on any not-null value | |
Use null check pattern instead of a type check succeeding on any not-null value | |
Use nullable annotation instead of an attribute | |
Useless arithmetical operation | |
Using stackalloc inside loop | |
赋值给非变量限定符表达式的属性的值可能会丢失 | |
'value' parameter is not used | |
Variable can be declared as non-nullable | |
Variable in local function hides variable from outer scope | |
Virtual member call in constructor | |
'void' method is annotated with the [MustDisposeResource] attribute | |
'void' method is annotated with the [MustUseReturnValue] attribute | |
'void' 方法带有 [Pure] 属性注解 | |
'with' expression is used instead of object initializer | |
'with' expression modifies all accessible instance members |
代码中的冗余(101 项检查)
此类别中的代码检查查找冗余和无用代码,这些代码会影响代码的可读性和风格,并且可以安全地移除。 某些代码冗余无法自动修复,其快速修复需要在交互模式下进行,需用户输入。 但大多数冗余可以在无需用户交互的情况下修复,使用 范围内修复 或 代码清理。
'??' condition is known to be null or not null | |
'??' condition is never null according to nullable reference types' annotations | |
[NotNull] or [CanBeNull] attribute is applied to a type that already has the same annotation from nullable reference types | |
匿名方法签名是多余的 | |
数组创建可替换为数组初始化器 | |
赋值未被使用 | |
赋值结果被完全丢弃 | |
与整型常量的比较无意义 | |
条件访问限定表达式已知为 null 或非 null | |
根据可空引用类型注解,条件访问限定表达式不为 null | |
在向字典添加项前调用 'ContainsKey' 是多余的 | |
CQRS 属性是冗余的,可予以删除 | |
双重取反运算符 | |
重复语句 | |
空的 for 循环是多余的 | |
空的区域 | |
显式委托创建表达式是多余的 | |
表达式始终为 'null' | |
表达式始终为 'true' 或始终为 'false' | |
根据可空引用类型注解,表达式始终为 'true' 或 'false' | |
启发式不可达代码 | |
立即调用委托 | |
Math.Abs() 参数始终为非负数 | |
Math.Sign() 方法始终返回相同结果 | |
如果属性没有参数,括号是多余的 | |
模式始终为 'true' 或始终为 'false' | |
私有字段可转换为局部变量 | |
原始字符串可简化 | |
多余的 [AttributeUsage] 属性属性赋值 | |
Redundant 'abstract' modifier | |
Redundant anonymous type property explicit name | |
传递给调用者参数表达式参数的多余参数 | |
Redundant argument with default value | |
Redundant arithmetic overflow checking context | |
Redundant 'Attribute' suffix | |
Redundant 'base.' qualifier | |
Redundant boolean comparison | |
Redundant braces in collection initializer | |
Redundant 'case' label | |
Redundant 'case' label before default section | |
多余的强制转换 | |
Redundant catch clause | |
Redundant 'class' keyword in record declaration | |
Redundant collection copy | |
Redundant condition check before assignments | |
Redundant conditional ternary expression usage | |
Redundant context capturing with 'ConfigureAwait' | |
多余的控制流跳转语句 | |
Redundant discard designation | |
多余的 'else' 关键字 | |
Redundant empty argument list on object creation expression | |
冗余的空 finally 块 | |
Redundant empty object or collection initializer | |
Redundant empty switch section | |
Redundant explicit collection creation in argument of 'params' parameter | |
Redundant explicit nullable type creation | |
Redundant explicit positional property declaration | |
数组创建中的多余显式大小指定 | |
Redundant explicit tuple component name | |
Redundant explicit type in array creation | |
Redundant fixed pointer declaration | |
Redundant global using directive | |
Redundant 'IEnumerable.Cast<T>' or 'IEnumerable.OfType<T>' call | |
Redundant lambda expression parameter type specification | |
Redundant lambda signature parentheses | |
Redundant name qualifier | |
Redundant 'notnull' constraint on type parameter constrained by non-nullable base type | |
Redundant nullable annotation on base type constraint of type parameter constrained by another non-nullable base type | |
Redundant nullable annotation on base type constraint of type parameter having non-nullable type kind | |
Redundant nullable annotation on 'class?' constraint of type parameter constrained by non-nullable base type | |
Redundant nullable attribute | |
Redundant nullable directive | |
Redundant nullable warning suppression expression | |
Redundant 'object.ToString()' call | |
Redundant 'object.ToString()' call for value types | |
逻辑条件表达式中的多余操作数 | |
Redundant 'orderby' clause 'ascending' keyword | |
Redundant property pattern clause | |
Redundant range bound | |
Redundant 'readonly' modifier | |
Redundant 'scoped' parameter modifier | |
Redundant semicolon after type or namespace declaration | |
Redundant string interpolation | |
Redundant 'string.Format()' call | |
Redundant 'string.ToCharArray()' call | |
冗余的 'switch' 表达式分支项 | |
Redundant type arguments inside 'nameof' | |
Redundant type arguments of method | |
Redundant type check in a pattern | |
Redundant type declaration body | |
冗余的 using 指令 | |
Redundant verbatim prefix | |
Redundant verbatim string prefix | |
Redundant 'virtual' modifier | |
Redundant 'WithCancellation()' invocation | |
Remove redundant pattern-matching parentheses | |
Subpattern that always matches is redundant | |
'true' is redundant as 'for'-statement condition | |
Type check for nullable type is equal to underlying type check | |
Unsafe context declaration is redundant | |
Unused nullable directive |
符号声明中的冗余(51 项检查)
此类别包括代码检查,主要具有 警告 严重性级别,用于检测空的和未使用的符号声明。
具有虚拟(可重写)成员的类从未被继承(非私有可访问性) | |
具有虚拟(可重写)成员的类从未被继承(私有可访问性) | |
Component of the tuple is never used | |
'DefaultParameterValueAttribute' must be used in conjunction with 'OptionalAttribute' | |
Empty constructor | |
Empty destructor | |
Empty implementation of 'partial void' method is redundant | |
Empty namespace declaration | |
实体仅用于捕获其名称(非私有可访问性) | |
实体仅用于捕获其名称(私有可访问性) | |
Local function is never used | |
Local function is never used | |
Local function return value is never used | |
方法返回值从未使用(非私有可访问性) | |
方法返回值从未使用(私有可访问性) | |
未访问的局部变量 | |
未访问的局部变量仅用于丢弃 'out' 参数值 | |
未访问的主构造函数参数 | |
参数仅用于前置条件检查(非私有可访问性) | |
参数仅用于前置条件检查(私有可访问性) | |
参数输出值始终被丢弃(非私有可访问性) | |
参数输出值始终被丢弃(私有可访问性) | |
'params' modifier is always ignored on overrides | |
冗余属性 [SetsRequiredMembers] | |
Redundant base constructor call | |
Redundant class or interface specification in base types list | |
Redundant member initializer | |
Redundant member override | |
Redundant method overload (non-private accessibility) | |
Redundant method overload (private accessibility) | |
Redundant 'partial' modifier on method declaration | |
Redundant 'partial' modifier on type declaration | |
Sealed member in sealed class | |
类型从未使用(非私有可访问性) | |
类型从未使用(私有可访问性) | |
类型成员从未通过基类型访问(非私有可访问性) | |
类型成员从未通过基类型访问(私有可访问性) | |
类型成员从未使用(非私有可访问性) | |
类型成员从未使用(私有可访问性) | |
类型成员仅在重写中使用(非私有可访问性) | |
类型成员仅在重写中使用(私有可访问性) | |
Underlying type of enum is 'int' | |
未使用的标签 | |
未使用的局部变量 | |
未使用的参数(非私有可访问性) | |
未使用的参数(私有可访问性) | |
部分方法中未使用的参数 | |
未使用的位置参数 | |
未使用的类型参数 | |
虚拟(可重写)成员从未被重写(非私有可访问性) | |
虚拟(可重写)成员从未被重写(私有可访问性) |
安全性(1 项检查)
此类别中的检查会根据 Mend.io 报告存在漏洞的 NuGet 包。
存在安全漏洞的 API 使用 |
拼写问题(3 项检查)
这些检查 检测各种上下文中的拼写错误。
注释中的拼写错误 | |
标识符中的拼写错误 | |
字符串字面量中的拼写错误 |
语法风格(46 项检查)
此类别中的检查检测 代码语法风格 的违规行为。 与大多数代码检查不同,这些检查是否将相同的代码结构检测为代码问题取决于在 ReSharper 选项 的 页面上配置的相应代码风格规则 Alt+R, O 。 您还可以使用 代码清理 修复这些检查检测到的问题。
Unity(48 项检查)
此类别中的检查报告特定于 Unity 项目的代码问题。
可用的非分配方法替代方案 | |
在继承自 'PropertyDrawer' 的类中避免使用 'base.OnGUI()' | |
无法解析组件或 ScriptableObject | |
DOTS:IAspect 字段必须为以下类型之一:RefRW、RefRO、EnabledRefRW、EnabledRefRO、DynamicBuffer 或 Entity | |
DOTS:类型关键字不一致 | |
DOTS:指定的类型必须为结构体类型 | |
已声明同名事件函数 | |
应为 'Component' 或 'MonoBehaviour' 的派生类型 | |
应为 'ScriptableObject' 的派生类型 | |
'ComponentLookup' 类型的字段在使用前必须先更新。 | |
文件名应与程序集名称一致 | |
未定义分组路径 | |
方法签名不正确 | |
Odin 分组属性类型不正确 | |
成员同时出现在多个 UI 分组中 | |
字符串字面量中引用的方法签名不符合预期 | |
'MonoBehaviour' 实例必须通过 'GameObject.AddComponent<T>()' 实例化,而非 'new' | |
参数应为 'Component' 的派生类型 | |
属性可能被错误地应用于多个字段 | |
对派生自 'UnityEngine.Object' 的类型进行 null 合并操作会绕过底层 Unity 引擎对象的生命周期检查,可能导致非预期的生命周期检查绕过 | |
对派生自 'UnityEngine.Object' 的类型进行 null 传播操作会绕过底层 Unity 引擎对象的生命周期检查,可能导致非预期的生命周期检查绕过 | |
对派生自 'UnityEngine.Object' 的类型进行模式匹配 null 检查会绕过底层 Unity 引擎对象的生命周期检查,可能导致非预期的生命周期检查绕过 | |
建议优先使用基于 GUID 的程序集引用 | |
属性用法多余(应用于此声明类型时属性是多余的) | |
属性用法多余('FormerlySerializedAs' 属性多余) | |
属性用法多余('HideInInspector' 属性多余) | |
属性用法多余('InitializeOnLoad' 属性多余) | |
属性用法多余('SerializeField' 属性多余) | |
Unity 事件函数多余 | |
多次访问内置组件的属性效率低下 | |
场景不存在 | |
场景在构建设置中被禁用 | |
'ScriptableObject' 实例必须通过 'ScriptableObject.CreateInstance<T>()' 实例化,而非 'new' | |
对象实例化后立即设置 'parent' 属性效率低下 | |
场景短名称不唯一 | |
基于字符串的图形属性查找效率低下 | |
基于字符串的组件类型查找效率低下 | |
SystemApi.Query<...> 类型参数必须为 Aspect、RefRO 或 RefRW | |
构建设置中缺少索引 | |
输入名称未在 Input 管理器中定义 | |
图层未在“Tags & Layers”中定义 | |
项目中未定义该资源 | |
The same shortcut is defined for another menu item | |
The tag is not defined in the 'Tags & Layers' | |
There is no animator state with the same name in the project. | |
There is no scene with the same name in the build settings | |
To use the result of a 'GetSingleton' call in the function, 'OnCreate' must include a 'RequireForUpdate' call | |
Use 'CompareTag' instead of explicit string comparison |
Unity Burst 编译器警告(17 项检查)
此类别中的检查在代码实际编译之前报告 Unity Burst 编译器的警告。
不支持访问托管索引器 | |
不支持访问托管方法 | |
不支持装箱操作 | |
Burst:String.Format(format, ...) 参数类型无效 | |
Burst:变量解析为 System.String,可能导致在 Burst 编译调用栈中出现无效的托管方法调用 | |
不支持创建托管类型 | |
调试日志函数仅接受字符串 | |
函数签名不能包含托管类型 | |
不支持从非 readonly 静态字段加载 | |
不支持加载托管类型 | |
共享静态类型参数需要非托管约束 | |
部分 SharedStatic`1.GetOrCreate 重载会导致编译器错误 | |
String.Format(format, ...) 仅接受字符串字面量和常量字符串 | |
不支持 'foreach' 结构 | |
不支持 Try 语句 | |
Burst 中禁止使用 typeof | |
不支持写入静态字段 |
Unity 性能检查(5 项检查)
此类别中的检查报告 Unity 项目中的计算效率低下的模式。
'Camera.main' 性能开销大 | |
高开销方法调用 | |
高开销 null 比较 | |
乘法运算顺序效率低下 | |
建议使用交错数组或一维数组替代多维数组 |
Unreal Build System(2 项检查)
此类别中的检查特定于 Unreal Engine项目。
项目文件中缺少该插件的依赖项 | |
不存在此名称的模块 |
Xunit(1 项检查)
这些检查会检测与 xUnit.Net 测试相关的代码问题。
Xunit 测试中的控制台输出 |