gpt4 book ai didi

c# - MS 代码分析规则 CA1008 : Enums should have zero value 的解决方法

转载 作者:行者123 更新时间:2023-11-30 14:30:57 25 4
gpt4 key购买 nike

我正在处理 .NET 4.0/C# 项目。我为我的项目启用了一些基本的代码分析规则。我被 CA1008 击中了。我完全理解为什么 CA1008是必要的。

我正在使用的软件与其他设备进行通信。这些设备是可配置的。配置存储在内部 EEPROM 中。其中一个配置是AlarmType,在EEPROM中它的值可以是1到11。我定义的报警类型如下:

public enum AlarmType
{
Type1 = 1,
Type2 = 2,
Type3 = 3,
// ...
Type10 = 10,
Type11 = 11
}

在配置设备时,我允许用户通过使用 Enum.GetValues() 获取警报值来选择一种警报类型。查看EEPROM中的值时,要求是如果值是1到11,则显示报警名称,否则认为是Type1

Visual Studio 2010 引发警告,指出 AlarmType 的值应为零。我不想添加这个,因为这将 (1) 违反 AlarmType 的定义(AlarmType 不能是 None)和( 2) 在枚举要呈现给用户的枚举值时,需要进行额外检查以排除 None 选项。

除了抑制 CA1008,我还能做些什么作为解决方法?我在设计中做错了什么吗?

最佳答案

AlarmType 的默认值为 0。在这行代码之后

AlaramType alarmType;

alarmType 的值为 0。但是,由于没有相应的枚举值,它现在具有无效值。这就是警告和你的陈述的原因

I don't want to add this because that will (1) violate the definition of AlarmType (AlarmType can't be None) and (2) an extra checking will be necessary to exclude None option when enumerating enum values to present to user.

不完全正确。事实上,AlarmType 的所有实例在被分配之前都将具有值 0,如果您想进行防御性编码,则必须验证 AlarmType 具有有效值。不为值 0 定义名称不会以任何方式保护您免受 AlarmType 变量因未初始化而为 0 的情况。

我建议您定义一个 0 枚举值并将其命名为 InvalidNone 或描述枚举变量尚未初始化的名称。

或者,如果您不想这样做,您可以使用 attribute 来抑制警告。 .

关于c# - MS 代码分析规则 CA1008 : Enums should have zero value 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21573020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com