CA1008:枚举应具有零值和标志枚举

Ign*_*cia 1 .net c# enums fxcop enum-flags

即使我完全知道CA1008警告存在的原因,我也不知道在下列情况下如何避免它.我有一个具有以下含义的Flag枚举:

ValidValue = 0x01
WrittenValue = 0x02
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,0表示InvalidValueNonWritten而不是None.规则

除了先前已发布的标记属性枚举之外,请勿禁止此规则发出警告.

在这种情况下,我没有发送枚举,所以如何防止此警告?

编辑:

警告明确说:

警告86 CA1008:Microsoft.Design:在枚举"XXX"中,将"XXX.InvalidValueNonWritten"的名称更改为"无".

编辑2:

枚举的更多状态:

CommandValue = 0x04 // Otherwise it is DataValue
InmediateValue = 0x08 // Otherwise it is Deferred
Run Code Online (Sandbox Code Playgroud)

Nic*_*oiu 5

在此特定时刻,0值具有"无效或写入"含义.但是,如果添加更多枚举成员,则不再是这种情况.例如,如果添加ApprovedValue = 0x04,0将开始表示"无效或书面或批准".这是始终使用None0值的名称的主要原因.

如果None作为名称没有意义,这通常表示枚举设计或名称中的缺陷.在您的情况下,它听起来像枚举实际上表示值已经通过的步骤,而不是值的状态(通常不会使用标志枚举).可能以下是您想要的更近的代表(关联类可能有一个类似的属性CompletedValueProcessingSteps)?

[Flags]
enum ValueProcessingSteps
{
    None = 0,
    Validation = 1,
    Writing = 2
}
Run Code Online (Sandbox Code Playgroud)