1

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

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
4

2 回答 2

5

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

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

[Flags]
enum ValueProcessingSteps
{
    None = 0,
    Validation = 1,
    Writing = 2
}
于 2014-03-28T12:28:32.807 回答
0

如果 0 表示 InvalidValueNonWritten,则将 InvalidValueNonWritten 添加到枚举中。那么这个警告就不会发生。如果你真的不应该在你的枚举中包含 0 ,请抑制代码中的警告,并确保将理由放入以供将来参考。

如果您期望由于 0 无效而出现异常,最好使用枚举在您的方法中执行验证。这对于序列化也更好,例如,如果您在模型上使用序列化,则模型将使用源中缺少的成员进行反序列化。

于 2014-03-27T14:44:22.417 回答