![](/img/trans.png)
[英]Workaround of MS Code Analysis rule CA1008: Enums should have zero value
[英]CA1008: Enums should have zero value and Flag enums
即使我完全知道为什么存在CA1008警告,在以下情况下我也不知道如何避免它。 我有一个Flag枚举,含义如下:
ValidValue = 0x01
WrittenValue = 0x02
因此,在这种情况下,0表示InvalidValueNonWritten而不是None。 规则说
除先前附带的带有标志属性的枚举外,请勿禁止此规则发出警告。
在这种情况下,我还没有交付枚举,那么如何防止此警告?
编辑:
该警告明确指出:
警告86 CA1008:Microsoft.Design:在枚举“ XXX”中,将“ XXX.InvalidValueNonWritten”的名称更改为“ None”。
编辑2:
枚举的更多状态:
CommandValue = 0x04 // Otherwise it is DataValue
InmediateValue = 0x08 // Otherwise it is Deferred
在此特定时刻,0值具有“无效或已写入”的含义。 但是,如果添加更多枚举成员,则不再是这种情况。 例如,如果添加ApprovedValue = 0x04
,则0表示“无效,书面或批准”。 这是始终将None
名称用作0值的主要原因。
如果“ None
作为名称没有意义,则通常表示该枚举设计或名称存在缺陷。 在您的情况下,听起来好像枚举实际上表示值已通过的步骤 ,而不是数值的状态 (通常不会使用标志枚举)。 以下内容可能更接近您的期望(关联的类可能具有一个名为CompletedValueProcessingSteps
类的属性)?
[Flags]
enum ValueProcessingSteps
{
None = 0,
Validation = 1,
Writing = 2
}
如果为0表示InvalidValueNonWritten,则将InvalidValueNonWritten添加到枚举中。 这样就不会发生此警告。 如果您的枚举中确实不应该包含0,请在代码中取消警告,并确保将理由放在后面以供将来参考。
如果您期望由于0无效而导致的异常无效,则最好使用枚举在您的方法中执行验证。 同样,这对于序列化比较好,例如,如果您在模型上使用序列化,则模型将使用源中缺少的成员反序列化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.