前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CA1069:枚举不得具有重复值

CA1069:枚举不得具有重复值

作者头像
用户4268038
发布于 2022-01-11 02:47:32
发布于 2022-01-11 02:47:32
6370
举报
文章被收录于专栏: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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
编辑精选文章
换一批
CA1027:用 FlagsAttribute 标记枚举
枚举的值是两个值的幂或枚举中定义的其他值的组合,且不存在 System.FlagsAttribute 属性。 为了减少误报,此规则不对具有连续值的枚举报告冲突。
用户4268038
2022/01/10
5890
CA2009:请勿对 ImmutableCollection 值调用 ToImmutableCollection
对 System.Collections.Immutable 命名空间中的不可变集合不必要地调用了 ToImmutable 方法。
用户4268038
2022/02/26
3620
记一次 C++ 核心语言标准中一个 issue 的发现和提交经历
上面的代码,无论是在 gcc/clang 还是 g++/clang++ 上,编译都是不能通过的,报错如下:
Miigon
2022/10/27
5220
CA1710:标识符应具有正确的后缀
按照约定,扩展某些基类型或实现某些接口的类型的名称,或者由这些类型派生的类型的名称应具有与相应基类型或接口关联的后缀。
呆呆
2022/02/18
1K0
语法解析器续:case..when表达式计算
之前写过一篇博客,是关于如何解析类似sql之类的解析器实现参考:https://www.cnblogs.com/yougewe/p/13774289.html
烂猪皮
2021/04/02
9210
Python Cerberuscerberus地狱犬 (Cerberus是一个用于Python的轻量级且可扩展的数据验证库)概述安装Cerberus用法验证规则(Validation Rules)规范
cerberus地狱犬 (Cerberus是一个用于Python的轻量级且可扩展的数据验证库) 前言 文章内容有点多,是自己学习cerberus的记录,原文,由于篇幅有限,源码的解析就没有了,源码不是
若与
2018/04/25
3.9K0
Python Cerberuscerberus地狱犬 (Cerberus是一个用于Python的轻量级且可扩展的数据验证库)概述安装Cerberus用法验证规则(Validation Rules)规范
Go基础系列:struct和嵌套struct
struct定义结构,结构由字段(field)组成,每个field都有所属数据类型,在一个struct中,每个字段名都必须唯一。
李海彬
2018/12/18
4.3K0
【Java数据结构】反射、枚举以及lambda表达式
Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。其本质是JVM得到Class对象之后,再通过Class对象进行反编译,从而获取对象的各种信息。
E绵绵
2024/09/12
860
【Java数据结构】反射、枚举以及lambda表达式
【MySQL】MySQL知识总结
随着,应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了一个 大问题。
半生瓜的blog
2023/05/13
7.3K1
【MySQL】MySQL知识总结
CA1700:不要用“Reserved”命名枚举值
此规则假定当前不使用名称中包含“reserved”的枚举成员,而是将其作为一个占位符,以在将来的版本中重命名或移除它。 重命名或移除成员是一项重大更改。 不应期望用户仅因为成员名称包含“reserved”而忽略该成员,也不能指望用户阅读或遵守文档。 此外,由于预留成员显示在对象浏览器和智能集成开发环境中,因此他们可能会造成混淆,以致于不知道实际使用哪些成员。
呆呆
2022/02/18
5040
CA1712:不要将类型名用作枚举值的前缀
命名约定为面向公共语言运行时的库提供通用外观。 这缩短了学习新软件库所需的时间,让客户更加相信该库是由拥有开发托管代码专业知识的人员所开发。
呆呆
2022/02/18
3990
CA2011:请勿在其资源库中分配属性
在属性的 set 访问器中将属性赋值给其自身会导致对 set 访问器的无限递归调用链。 这将在运行时产生 StackOverflowException。 当属性和用于存储属性值的支持字段具有相似的名称时,这种错误很常见。 值意外地赋值给属性本身,而不是赋值给支持字段。
用户4268038
2022/02/20
3730
听GPT 讲Rust源代码--src/tools(23)
在Rust源代码中,rust/src/tools/clippy/rustc_tools_util/src/lib.rs文件的作用是为Clippy提供了一些实用工具和辅助函数。
fliter
2024/01/09
1620
【protobuf】四、proto3语法详解③ -- 默认值 && 消息更新规则 && option选项
​ 反序列化消息时,如果被反序列化的二进制序列中不包含某个字段,反序列化对象中相应字段时,就会设置为该字段的默认值。不同的类型对应的默认值不同:
利刃大大
2025/02/08
1490
【protobuf】四、proto3语法详解③ -- 默认值 && 消息更新规则 && option选项
你是如何处理 PHP 代码中的枚举类型 Enum 的?
本文旨在提供一些更好的理解什么是枚举,什么时候使用它们以及如何在php中使用它们.
猿哥
2019/10/13
1.5K0
CA1018:用 AttributeUsageAttribute 标记特性
自定义特性上不存在 System.AttributeUsageAttribute 特性。
用户4268038
2022/01/10
1830
CA1008:枚举应具有零值
非中断 - 如果系统提示你向无标志枚举添加 None 值。 中断 - 如果系统提示你重命名或删除任何枚举值。
用户4268038
2022/01/10
5170
day21-反射&枚举
一个类的生命周期包括了 “加载”、“验证”、“准备”、“解析”、“初始化”、“使用”、“卸载” 这七个阶段, 一般我们只研究前五个阶段,这五个阶段又可以分为 “加载”、“连接、验证,解析” 、 “初始化”
用户9184480
2024/12/13
920
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
本系列的前几篇主要是从各个角度讲解Protobuf的基本概念、技术原理这些内容,但回过头来看,对比JSON这种事实上的数据协议工业标准,Protobuf到底性能到底高多少?
JackJiang
2022/12/16
6840
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
CA2000:丢失范围之前释放对象
创建了 IDisposable 类型的本地对象,但该对象不会被释放,除非对对象的所有引用都超出范围。
呆呆
2022/02/26
8980
推荐阅读
相关推荐
CA1027:用 FlagsAttribute 标记枚举
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文