前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CA1825:避免数组分配长度为零

CA1825:避免数组分配长度为零

作者头像
用户4268038
发布于 2022-02-19 10:42:35
发布于 2022-02-19 10:42:35
4380
举报
文章被收录于专栏:stcnbstcnb

规则 ID

CA1825

类别

“性能”

修复是中断修复还是非中断修复

非中断

原因

分配了一个不包含任何元素的空 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”。

何时禁止显示警告

如果不在乎额外的内存分配,可禁止显示此规则的冲突。

相关规则

CA1814:与多维数组相比,首选使用交错数组

另请参阅

性能规则

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CA1814:与多维数组相比,首选使用交错数组
在多维数组中,每个维度中的每个元素都具有与该维度中的其他元素相同的固定大小。 在交错数组(即多个数组构成的数组)中,每个内部数组的大小可以不同。 通过仅使用给定数组所需的空间,就不会浪费空间。 此 CA1814 规则建议切换到交错数组以节省内存。
呆呆
2022/02/19
6550
CA1027:用 FlagsAttribute 标记枚举
枚举的值是两个值的幂或枚举中定义的其他值的组合,且不存在 System.FlagsAttribute 属性。 为了减少误报,此规则不对具有连续值的枚举报告冲突。
用户4268038
2022/01/10
5950
CA1834:对单字符字符串使用 StringBuilder.Append(char)
使用单位长度字符串调用 StringBuilder.Append 时,请考虑使用 const char 而不是单位长度 const string 来提高性能。
用户4268038
2022/02/19
5900
CA1721:属性名不应与 get 方法冲突
成员的名称以“Get”开头,且其余部分与属性的名称匹配。 例如,包含名为“GetColor”的方法和名为“Color”的属性的类型将导致规则冲突。
呆呆
2022/02/19
3670
CA1841:首选字典包含方法
此规则可找到在 IDictionary<TKey,TValue> 的 Keys 或 Values 集合上对 Contains 方法的调用,这些调用可替换为在字典本身对 ContainsKey 或 ContainsValue 方法的调用。
呆呆
2022/02/26
3390
CA1827:如果可以使用 Any,请勿使用 Count/LongCount
在使用 Any 方法会更有效的情况下使用了 Count 或 LongCount 方法。
用户4268038
2022/02/19
5780
CA1040:避免使用空接口
接口定义提供某个行为或使用协定的成员。 接口所描述的功能可以被任何类型采用,而不管该类型出现在继承层次结构中的哪个位置。 类型通过实现接口的成员来实现接口。 空接口不定义任何成员。 因此,它不定义可实现的协定。
呆呆
2022/01/10
3720
CA1828:如果可以使用 AnyAsync,请勿使用 CountAsync/LongCountAsync
在使用 AnyAsync 方法会更有效的情况下使用了 CountAsync 或 LongCountAsync 方法。
用户4268038
2022/02/19
6140
CA1044:属性不应是只写的
Get 访问器提供对属性的读取访问权限,而 set 访问器提供写入访问权限。 虽然可以接受且经常需要使用只读属性,但设计准则禁止使用只写属性。 这是因为允许用户设置值但又禁止该用户查看这个值不能提供任何安全性。 而且,如果没有读访问,将无法查看共享对象的状态,使其用处受到限制。
呆呆
2022/01/10
2110
CA1012:抽象类型不应具有公共构造函数
抽象类型的构造函数只能由派生类型调用。 由于公共构造函数可创建类型的实例,但无法创建抽象类型的实例,因此具有公共构造函数的抽象类型在设计上是错误的。
用户4268038
2022/01/10
5130
CA1056:URI 属性不应是字符串
类型声明名称包含“uri”、“Uri”、“urn”、“Urn”、“url”或“Url”的字符串属性。
呆呆
2022/02/22
5240
CA1024:在适用处使用属性
在大多数情况下,属性表示数据,方法执行操作。 访问属性的方式类似于访问字段,这使得它们更易于使用。 如果一个方法具备以下条件之一,则该方法可能很适合成为属性:
用户4268038
2022/01/10
4510
CA1838:不要对 P/Invoke 使用 StringBuilder 参数
StringBuilder 的封送处理总是会创建一个本机缓冲区副本,这导致一个 P/Invoke 调用出现多次分配。 若要将 StringBuilder 作为 P/Invoke 参数进行封送,运行时将:
用户4268038
2022/02/19
5040
CA1820:使用字符串长度测试是否有空字符串
使用 String.Length 属性或 String.IsNullOrEmpty 方法比较字符串比使用 Equals 更快。 这是因为 Equals 执行的 MSIL 指令比 IsNullOrEmpty 或执行以用于检索 Length 属性值并将其与零进行比较的指令数要多得多。
呆呆
2022/02/19
3150
CA1837:使用 Environment.ProcessId 而不是 Process.GetCurrentProcess().Id
此规则会查找对 System.Diagnostics.Process.GetCurrentProcess().Id 的调用,并建议改用 System.Environment.ProcessId,因为这样更高效。
用户4268038
2022/02/19
5660
CA1846:首选 AsSpan 次选 Substring
对其中一个 String.Substring 重载的调用结果被传递给具有接受 ReadOnlySpan<Char> 的可用重载的方法。
呆呆
2022/02/26
9620
CA1036:重写可比较类型中的方法
类型实现 System.IComparable 接口,并且不重写 System.Object.Equals,也不重载表示相等、不等、小于或大于的语言特定运算符。 如果类型仅继承接口的实现,则规则不会报告冲突。
呆呆
2022/01/10
6480
CA1715:标识符应具有正确的前缀
接口名称应以大写的“I”开头,后跟另一个大写字母。 此规则报告与接口名称(如“MyInterface”和“IsolatedInterface”)相关的冲突。
呆呆
2022/02/19
5240
CA1051:不要声明可见实例字段
字段的主要用途应是作为实现的详细信息。 字段应为 private 或 internal,并应通过使用属性公开这些字段。 在访问某个字段时,可轻松访问属性,而属性访问器中的代码可在扩展类型功能时更改,而不会引入重大更改。
呆呆
2022/01/10
4810
CA1055:URI 返回值不应是字符串
方法名称包含“uri”、“Uri”、“urn”、“Urn”、“url”或“Url”,且方法返回一个字符串。
呆呆
2022/01/10
5160
推荐阅读
相关推荐
CA1814:与多维数组相比,首选使用交错数组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档