CA1825:避免数组分配长度为零
属性 | 值 |
---|---|
规则 ID | CA1825 |
标题 | 避免数组分配长度为零 |
类别 | “性能” |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 作为建议 |
原因
分配了一个不包含任何元素的空 Array。
规则说明
初始化长度为零的数组将导致不必要的内存分配。 请改为通过调用 Array.Empty 方法来使用静态分配的空数组实例。 内存分配在此方法的所有调用之间共享。
如何解决冲突
若要解决冲突,请将长度为零的数组分配替换为对 Array.Empty 的调用。 例如,以下两个代码片段显示了规则冲突及其解决方法:
class C
{
public void M1()
{
// Violates rule CA1825.
var a = new int[0];
}
}
class C
{
public void M1()
{
// Resolves rule CA1825 violation.
var a = System.Array.Empty<int>();
}
}
提示
Visual Studio 中为此规则提供了代码修补程序。 若要使用它,请将光标置于数组分配上,然后按“Ctrl+.”(句点)。 从显示的选项列表中选择“使用 Array.Empty”。
何时禁止显示警告
如果不在乎额外的内存分配,可禁止显示此规则的冲突。
注意
如果满足以下所有条件,你可能会看到来自此规则的误报警告:
- 你将 Visual Studio 2022 版本 17.5 或更高版本与旧版 .NET SDK(即 .NET 6 或更低版本)配合使用。
- 你使用的是 .NET 6 SDK 中的分析器或较旧版本的分析器包,例如 Microsoft.CodeAnalysis.FxCopAnalyzers。
- 使用零长度数组作为属性参数,最常见的是用作
params
参数。
误报是由于 C# 编译器中的中断性变更造成的。 请考虑使用更新的包含误报警告修补程序的分析器。 升级到 Microsoft.CodeAnalysis.NetAnalyzers 版本 7.0.0-preview1.22464.1 或更高版本,或使用 .NET 7 SDK 中的分析器。
抑制警告
如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。
#pragma warning disable CA1825
// The code that's violating the rule is on this line.
#pragma warning restore CA1825
若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none
。
[*.{cs,vb}]
dotnet_diagnostic.CA1825.severity = none
有关详细信息,请参阅如何禁止显示代码分析警告。