Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CA1069:枚举不得具有重复值

CA1069:枚举不得具有重复值

作者头像
用户4268038
发布于 2022-01-11 02:47:32
发布于 2022-01-11 02:47:32
6520
举报
文章被收录于专栏:stcnbstcnb

规则 ID

CA1069

类别

设计

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

重大

原因

枚举具有多个成员,这些成员显式分配有相同常数值。

规则说明

每个枚举成员都应具有唯一的常数值,或者为其显式分配枚举中的前一个成员以指示共享值的明确意图。 例如:

enum E

{

Field1 = 1,

AnotherNameForField1 = Field1, // This is fine

Field2 = 2,

Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.

}

此规则有助于捕获在以下场景中引入的功能性 bug:

意外键入错误:用户意外地为多个成员键入了相同的常数值。

复制粘贴错误:用户复制了一个现有成员定义,然后重命名了该成员,但忘记更改值。

合并多个分支中的解决方案:在不同分支中添加了具有不同名称但有相同值的新成员。

如何解决冲突

若要解决冲突,请分配新的唯一常数值,或分配枚举中的前一个成员以指示共享同一值的明确意图。 例如,以下代码片段显示了与此规则的冲突,以及解决冲突的几种方法:

enum E

{

Field1 = 1,

AnotherNameForField1 = Field1, // This is fine

Field2 = 2,

Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.

}

enum E

{

Field1 = 1,

AnotherNameForField1 = Field1, // This is fine

Field2 = 2,

Field3 = 3, // This is now fine

}

enum E

{

Field1 = 1,

AnotherNameForField1 = Field1, // This is fine

Field2 = 2,

Field3 = Field2, // This is also fine

}

何时禁止显示警告

请勿禁止显示此规则的冲突。

另请参阅

设计规则

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CA1008:枚举应具有零值
非中断 - 如果系统提示你向无标志枚举添加 None 值。 中断 - 如果系统提示你重命名或删除任何枚举值。
用户4268038
2022/01/10
5390
CA1712:不要将类型名用作枚举值的前缀
命名约定为面向公共语言运行时的库提供通用外观。 这缩短了学习新软件库所需的时间,让客户更加相信该库是由拥有开发托管代码专业知识的人员所开发。
呆呆
2022/02/18
4090
CA1027:用 FlagsAttribute 标记枚举
枚举的值是两个值的幂或枚举中定义的其他值的组合,且不存在 System.FlagsAttribute 属性。 为了减少误报,此规则不对具有连续值的枚举报告冲突。
用户4268038
2022/01/10
6020
CA1700:不要用“Reserved”命名枚举值
此规则假定当前不使用名称中包含“reserved”的枚举成员,而是将其作为一个占位符,以在将来的版本中重命名或移除它。 重命名或移除成员是一项重大更改。 不应期望用户仅因为成员名称包含“reserved”而忽略该成员,也不能指望用户阅读或遵守文档。 此外,由于预留成员显示在对象浏览器和智能集成开发环境中,因此他们可能会造成混淆,以致于不知道实际使用哪些成员。
呆呆
2022/02/18
5190
CA2009:请勿对 ImmutableCollection 值调用 ToImmutableCollection
对 System.Collections.Immutable 命名空间中的不可变集合不必要地调用了 ToImmutable 方法。
用户4268038
2022/02/26
3700
CA1028:枚举存储应为 Int32
枚举是一种值类型,它定义一组相关的已命名常数。 默认情况下,System.Int32 数据类型用于存储常量值。 虽然你可以更改此基础类型,但对于大多数情况,既不需要,也不建议你这样做。 使用小于 Int32 的数据类型不会显著提高性能。 如果无法使用默认数据类型,则应使用某种符合公共语言规范 (CLS) 的整型类型,例如 Byte、Int16、Int32 或 Int64,以确保枚举的所有值都可以用符合 CLS 的编程语言表示。
用户4268038
2022/01/10
4770
CA2011:请勿在其资源库中分配属性
在属性的 set 访问器中将属性赋值给其自身会导致对 set 访问器的无限递归调用链。 这将在运行时产生 StackOverflowException。 当属性和用于存储属性值的支持字段具有相似的名称时,这种错误很常见。 值意外地赋值给属性本身,而不是赋值给支持字段。
用户4268038
2022/02/20
3830
CA1018:用 AttributeUsageAttribute 标记特性
自定义特性上不存在 System.AttributeUsageAttribute 特性。
用户4268038
2022/01/10
1890
【protobuf】四、proto3语法详解③ -- 默认值 && 消息更新规则 && option选项
​ 反序列化消息时,如果被反序列化的二进制序列中不包含某个字段,反序列化对象中相应字段时,就会设置为该字段的默认值。不同的类型对应的默认值不同:
利刃大大
2025/02/08
2050
【protobuf】四、proto3语法详解③ -- 默认值 && 消息更新规则 && option选项
CA2326:请勿使用 None 以外的 TypeNameHandling 值
引用了 None 以外的 Newtonsoft.Json.TypeNameHandling 枚举值。
呆呆
2022/02/27
8950
记一次 C++ 核心语言标准中一个 issue 的发现和提交经历
上面的代码,无论是在 gcc/clang 还是 g++/clang++ 上,编译都是不能通过的,报错如下:
Miigon
2022/10/27
5330
mysql学习总结02 — 数据类型
无符号:表示存储的数据在当前字段中,没有负数(只有正数,例如 tinyint 区间为 0~255)
CS逍遥剑仙
2018/06/24
1.4K0
mysql学习总结02 — 数据类型
CA1710:标识符应具有正确的后缀
按照约定,扩展某些基类型或实现某些接口的类型的名称,或者由这些类型派生的类型的名称应具有与相应基类型或接口关联的后缀。
呆呆
2022/02/18
1K0
语法解析器续:case..when表达式计算
之前写过一篇博客,是关于如何解析类似sql之类的解析器实现参考:https://www.cnblogs.com/yougewe/p/13774289.html
烂猪皮
2021/04/02
9330
Python Cerberuscerberus地狱犬 (Cerberus是一个用于Python的轻量级且可扩展的数据验证库)概述安装Cerberus用法验证规则(Validation Rules)规范
cerberus地狱犬 (Cerberus是一个用于Python的轻量级且可扩展的数据验证库) 前言 文章内容有点多,是自己学习cerberus的记录,原文,由于篇幅有限,源码的解析就没有了,源码不是
若与
2018/04/25
3.9K0
Python Cerberuscerberus地狱犬 (Cerberus是一个用于Python的轻量级且可扩展的数据验证库)概述安装Cerberus用法验证规则(Validation Rules)规范
你是如何处理 PHP 代码中的枚举类型 Enum 的?
本文旨在提供一些更好的理解什么是枚举,什么时候使用它们以及如何在php中使用它们.
猿哥
2019/10/13
1.6K0
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
本系列的前几篇主要是从各个角度讲解Protobuf的基本概念、技术原理这些内容,但回过头来看,对比JSON这种事实上的数据协议工业标准,Protobuf到底性能到底高多少?
JackJiang
2022/12/16
6970
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
【MySQL】MySQL知识总结
随着,应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了一个 大问题。
半生瓜的blog
2023/05/13
7.4K1
【MySQL】MySQL知识总结
如何处理PHP代码中的枚举类型enum?
我们有时使用常量来定义代码中的一些常量值。它们被用来避免魔法价值。我们可以用一个符号名称替换一些魔法值来赋予它一些意义。然后我们在代码中引用符号名。因为我们定义了一次并多次使用它,所以搜索它以及以后重命名或更改值会更容易。
叫我可儿呀
2019/12/05
1.6K0
浅谈离线数据倾斜
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了
京东技术
2023/08/22
5580
浅谈离线数据倾斜
推荐阅读
相关推荐
CA1008:枚举应具有零值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档