用法规则

使用规则支持 .NET 的正确用法。

本节中

规则 描述
CA1801:检查未使用的参数 方法签名包含一个没有在方法体中使用的参数。
CA1816: 正确调用 GC.SuppressFinalize 作为 Dispose 实现的方法未调用 GC.SuppressFinalize;或者,不是 Dispose 实现的方法调用了 GC.SuppressFinalize;或者,某个方法调用了 GC.SuppressFinalize,并传递了除 this(在 Visual Basic 中为 Me)以外的其他内容。
CA2200: 重新抛出以保留堆栈详细信息 重新引发异常,并在 throw 语句中显式指定该异常。 如果通过在 throw 语句中指定异常来重新引发该异常,则引发该异常的原始方法与当前方法之间的方法调用的列表将丢失。
CA2201: 请勿引发保留的异常类型 这使得很难检测和调试原始错误。
CA2207:以内联方式初始化值类型的静态字段 某值类型声明了显式静态构造函数。 要修复与该规则的冲突,请在声明它时初始化所有静态数据并移除静态构造函数。
CA2208: 正确实例化参数异常对象 调用了异常类型 ArgumentException 或其派生类型的默认(无参数)构造函数,或者向异常类型 ArgumentException 或其派生类型的参数化构造函数传递了错误的字符串参数。
CA2211:非常量字段不应是可见的 不是常数也不是只读的静态字段不是线程安全的。 必须谨慎控制对这类字段的访问,并需要使用高级编程技术来实现对类对象的同步访问。
CA2213: 可释放字段应被释放 实现 System.IDisposable 的类型声明具有同样实现 IDisposable 的类型的字段。 字段的 Dispose 方法不由声明类型的 Dispose 方法调用。
CA2214:不要在构造函数中调用可重写的方法 构造函数调用虚拟方法时,可能尚未执行调用该方法的实例的构造函数。
CA2215:Dispose 方法应调用基类释放 如果某个类型继承自一个可释放类型,则该类型必须从其自身的 Dispose 方法内调用基类型的 Dispose 方法。
CA2216:可释放类型应声明终结器 实现 System.IDisposable 并包含建议使用非托管资源的字段的类型未实现 Object.Finalize 所描述的终结器。
CA2217:不要使用 FlagsAttribute 标记枚举 外部可见的枚举标记为 FlagsAttribute,并且其一个或多个值不是 2 的幂,也不是该枚举中定义的其他值的组合。
CA2218: 在重写 Equals 时重写 GetHashCode 公共类型重写 System.Object.Equals,但不重写 System.Object.GetHashCode
CA2219: 不要在异常处理子句中引发异常 如果在 finally 或 fault 子句中引发了异常,新的异常会隐藏当前正在处理的异常。 当在筛选器子句中引发异常时,运行时会静默地捕获该异常。 这使得很难检测和调试原始错误。
CA2224:重载相等运算符时重写 Equals 方法 公共类型会实现相等运算符,但不重写 System.Object.Equals
CA2225:运算符重载具有命名的备用项 检测到运算符重载,但未找到预期的指定备用方法。 命名的备用成员提供对与运算符相同的功能的访问,并且可供以不支持重载运算符的语言进行编程的开发人员使用。
CA2226:运算符应有对称重载 类型实现相等运算符或不相等运算符,但不实现相反运算符。
CA2227:集合属性应为只读 使用可写的集合属性,用户可以将该集合替换为不同的集合。 只读属性禁止替换该集合,但仍允许设置单个成员。
CA2229:实现序列化构造函数 要修复与该规则的冲突,请实现序列化构造函数。 对于封闭类,将构造函数设为私有;否则,将其设为受保护。
CA2231: 重写 ValueType.Equals 时应重载相等运算符 值类型重写了 Object.Equals,但未实现相等运算符。
CA2234:传递 System.Uri 对象,而不传递字符串 调用了带有一个字符串参数的方法,该参数的名称中包含“uri”、“URI”、“urn”、“URN”、“url”或“URL”。 此方法的声明类型包含具有 System.Uri 参数的对应方法重载。
CA2235:标记所有不可序列化的字段 在可以序列化的类型中声明了类型不可序列化的实例字段。
CA2237:用 SerializableAttribute 标记 ISerializable 类型 若要被公共语言运行时识别为可序列化,类型必须用 SerializableAttribute 特性标记,即使该类型通过实现 ISerializable 接口使用了自定义的序列化例程也是如此。
CA2241:为格式化方法提供正确的参数 传递到 String.Format 的 format 实参不包含对应于每个对象实参的格式项,反之亦然。
CA2242:正确测试 NaN 此表达式针对 Single.NanDouble.Nan 测试值。 使用 Single.IsNan(Single)Double.IsNan(Double) 测试值。
CA2243:特性字符串文本应正确分析 特性的字符串字面量参数无法被正确解析为 URL、GUID 或版本。
CA2244: 不要重复带索引的元素初始化 对象初始值设定器包含多个具有相同常量索引的索引元素初始值设定器。 除最后一个初始值设定项之外,其余都是冗余的。
CA2245:请勿将属性分配给其自身 某个属性被意外地赋值给自身。
CA2246:请勿在同一语句中分配符号及其成员 不建议在同一语句中分配符号及其成员(即字段或属性)。 目前尚不清楚,在这条语句中,对成员的访问本意是要使用赋值前该符号的旧值,还是赋值后的新值。
CA2247:传递给 TaskCompletionSource 构造函数的参数应为 TaskCreationOptions 枚举,而不是 TaskContinuationOptions 枚举 TaskCompletionSource 既有采用控制基础任务的 TaskCreationOptions 的构造函数,也有采用任务中存储的对象状态的构造函数。 如果误传入的是 TaskContinuationOptions 而非 TaskCreationOptions,则该调用会将该选项视为状态对象。
CA2248:向 Enum.HasFlag 提供正确的 enum 实参 作为参数传递给 HasFlag 方法调用的枚举类型与调用方的枚举类型不同。
CA2249:请考虑使用 String.Contains 而不是 String.IndexOf string.IndexOf 的调用(其结果用于检查是否存在子字符串)可以用 string.Contains 替换。
CA2250:使用 ThrowIfCancellationRequested ThrowIfCancellationRequested 自动检查令牌是否已取消,如果已取消,则引发 OperationCanceledException
CA2251:使用 String.Equals 代替 String.Compare 与其将 String.Equals 的结果与零进行比较,不如使用 String.Compare,这样更清晰且速度可能更快。
CA2252:选择预览功能 在使用预览 API 之前,请先选择启用预览功能。
CA2253:已命名占位符不应是数值 日志记录消息模板中的已命名占位符不应仅由数值字符组成。
CA2254:模板应为静态表达式 日志记录消息模板不应因调用而异。
CA2255:不应在库中使用 ModuleInitializer 属性 模块初始值设定项旨在由应用程序代码使用,以确保在应用程序代码开始执行之前初始化应用程序的组件。
CA2256:在父接口中声明的所有成员必须在具有 DynamicInterfaceCastableImplementation 特性的接口中具有实现 带有特性 DynamicInterfaceCastableImplementationAttribute 的类型会作为实现了 IDynamicInterfaceCastable 类型的某个类型的接口实现。 因此,它必须提供继承接口中定义的所有成员的实现,因为若非如此,实现 IDynamicInterfaceCastable 的类型将不会提供它们。
CA2257:在具有“DynamicInterfaceCastableImplementationAttribute”的接口上定义的成员应为“static” 由于实现 IDynamicInterfaceCastable 的类型可能无法在元数据中实现动态接口,因此对不是在此类型上定义的显式实现的实例接口成员的调用可能会在运行时失败。 标记新接口成员 static 以避免运行时错误。
CA2258:不支持在 Visual Basic 中提供“DynamicInterfaceCastableImplementation”接口 提供具有 DynamicInterfaceCastableImplementationAttribute 特性的功能性接口需要“默认接口成员”功能,这在 Visual Basic 中不受支持。
CA2259:确保 ThreadStatic 仅与静态字段一起使用 ThreadStaticAttribute 仅影响 static(在 Visual Basic 中为 Shared)字段。 在应用于实例字段时,该属性对行为没有影响。
CA2260:正确实现泛型数学接口 泛型数学接口要求将派生类型本身用于自重复类型参数。
CA2261:请勿将 ConfigureAwaitOptions.SuppressThrowingTask<TResult> 一起使用 泛型 ConfigureAwaitOptions.SuppressThrowing 不支持 Task<TResult> 选项,因为这可能会导致返回无效 TResult
CA2262:正确设置 MaxResponseHeadersLength 确保正确提供 MaxResponseHeadersLength 值。 此值以千字节为单位。
CA2263:在已知类型时首选泛型重载 当类型已知时,使用泛型重载比传递 System.Type 参数更可取,因为前者可以借助改进的编译时检查,使代码更简洁且类型更安全。
CA2264:不要将不可为 null 的值传递给“ArgumentNullException.ThrowIfNull” ArgumentNullException.ThrowIfNull 会在传入的参数为 null 时引发异常。 某些语言构造(如不可为 null 的结构体)以及 `nameof()` 和 `new` 表达式已知绝不会为 null,因此 `ArgumentNullException.ThrowIfNull` 永远不会引发异常。
CA2265:不要将Span<T>nulldefault进行比较 将 span 与 nulldefault 进行比较,结果可能并非你想要的。 defaultnull 字面量会被隐式转换为 Span<T>.Empty
CA2266:基于文件的程序入口点应以 开头 #! 当基于文件的程序由多个文件组成时,入口点文件应以 shebang (#!) 行开头,以清楚地将其与其他包含的文件区分开来。