我正在研究.NET 4.0/C#项目.我为我的项目启用了一些基本的代码分析规则.我被CA1008击中了.我完全理解为什么CA1008是必要的.
我正在处理的软件与其他设备通信.这些设备是可配置的.配置存储在内部EEPROM中.其中一个配置是AlarmType
,EEPROM中的值可以是1到11.我已经定义了如下警报类型:
public enum AlarmType
{
Type1 = 1,
Type2 = 2,
Type3 = 3,
// ...
Type10 = 10,
Type11 = 11
}
Run Code Online (Sandbox Code Playgroud)
在配置设备时,我允许用户通过使用获取警报值来选择其中一种警报类型Enum.GetValues()
.检查EEPROM中的值时,要求就像是从1到11的值,然后显示警报的名称,否则请考虑它Type1
.
Visual Studio 2010会发出警告,指出AlarmType
应该具有等于零的值.我不想添加这个,因为它会(1)违反AlarmType
(AlarmType
不能)的定义,None
并且(2)None
在枚举枚举值以呈现给用户时,需要额外的检查来排除选项.
而不是抑制CA1008,我可以做什么作为一种解决方法?我的设计中做错了吗?
默认值为AlarmType
0.例如,在这行代码之后
AlaramType alarmType;
Run Code Online (Sandbox Code Playgroud)
值为alarmType
0.但是,由于没有相应的枚举值,它现在具有无效值.这就是警告和你的陈述的原因
我不想添加这个,因为它会(1)违反AlarmType的定义(AlarmType不能为None)和(2)在枚举枚举值以呈现给用户时,需要额外的检查以排除None选项.
不太正确.事实上,AlarmType
在分配它们之前,所有实例都将具有值0,如果您想要进行防御性编码,则必须验证它AlarmType
是否具有有效值.不定义值0的名称不会以任何方式保护您免受AlarmType
变量为0的情况,因为它们未初始化.
我建议你定义一个0枚举值并调用它Invalid
或者None
描述枚举变量尚未初始化的东西.
或者,如果您不想这样做,可以使用属性禁止警告.
归档时间: |
|
查看次数: |
725 次 |
最近记录: |