值
规则 ID
CA1802
类别
“性能”
修复是中断修复还是非中断修复
非中断
原因
某个字段被声明为 static 和 readonly(在 Visual Basic 中为 Shared 和 ReadOnly),并使用可在编译时计算的值初始化。
默认情况下,此规则仅查看外部可见的静态只读字段,但这是可配置的。
规则说明
当调用声明类型的静态构造函数时,将在运行时计算 static readonly 字段的值。 如果 static readonly 字段在声明时被初始化并且静态构造函数不是显式声明的,编译器将发出一个静态构造函数来初始化该字段。
const 字段的值是在编译时计算的,并存储在元数据中,这与 static readonly 字段相比,运行时性能提高了。
因为赋给目标字段的值可在编译时计算,所以,请将声明更改为 const 字段,以便在编译时(而非运行时)计算该值。
如何解决冲突
若要解决此规则的冲突,请将 static 和 readonly 修饰符替换为 const 修饰符。
备注
不建议对所有方案使用 const 修饰符。
何时禁止显示警告
如果性能无关紧要,则可安全地禁止显示此规则发出的警告,或禁用此规则。
配置代码以进行分析
使用下面的选项来配置代码库的哪些部分要运行此规则。
包含特定的 API 图面
必需的修饰符
可以仅为此规则、为所有规则或为此类别(性能)中的所有规则配置这些选项。 有关详细信息,请参阅代码质量规则配置选项。
包含特定的 API 图面
你可以根据代码库的可访问性,配置要针对其运行此规则的部分。 例如,若要指定规则应仅针对非公共 API 图面运行,请将以下键值对添加到项目中的 .editorconfig 文件:
dotnet_code_quality.CAXXXX.api_surface = private, internal
必需的修饰符
可以将此规则配置为重写必需的字段修饰符。 默认情况下,static 和 readonly 都是所分析字段的必需修饰符。 可以将其重写为以逗号分隔的包含下表中一个或多个修饰符值的列表:
选项值
总结
none
无修饰符要求。
static 或 Shared
必须声明为“static”(在 Visual Basic 中为“Shared”)。
const
必须声明为“const”。
readonly
必须声明为“readonly”。
例如,若要指定规则应针对静态或实例字段运行,请将以下键值对添加到项目的 .editorconfig 文件中:
dotnet_code_quality.CA1802.required_modifiers = none
示例
下面的示例显示了一个与此规则冲突的 UseReadOnly 类型,以及一个符合此规则的 UseConstant 类型。
Imports System
Namespace ca1802
' This class violates the rule.
Public Class UseReadOnly
Shared ReadOnly x As Integer = 3
Shared ReadOnly y As Double = x + 2.1
Shared ReadOnly s As String = "readonly"
End Class
' This class satisfies the rule.
Public Class UseConstant
Const x As Integer = 3
Const y As Double = x + 2.1
Const s As String = "const"
End Class
End Namespace
// This class violates the rule.
public class UseReadOnly
{
static readonly int x = 3;
static readonly double y = x + 2.1;
static readonly string s = "readonly";
}
// This class satisfies the rule.
public class UseConstant
{
const int x = 3;
const double y = x + 2.1;
const string s = "const";
}
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。