即使我完全了解CA1008警告存在的原因,我也不知道在以下情况下如何避免它。我有一个具有以下含义的Flag枚举:
ValidValue = 0x01
WrittenValue = 0x02
所以在这种情况下,0表示InvalidValueNonWritten而不是None。规则says
请勿禁止此规则发出警告,但先前已发送的标记属性枚举除外。
在这种情况下,我没有发送枚举,所以如何防止此警告?
修改
警告明确地说:
警告86 CA1008:Microsoft.Design:在枚举' XXX'中,更改' XXX.InvalidValueNonWritten'的名称。到'无'。
编辑2:
枚举的更多状态:
CommandValue = 0x04 // Otherwise it is DataValue
InmediateValue = 0x08 // Otherwise it is Deferred
答案 0 :(得分:5)
在此特定时刻,0值具有“无效或无效”的含义。但是,如果添加更多枚举成员,则不再是这种情况。例如,如果添加ApprovedValue = 0x04
,则0将开始表示“无效或已写入或已批准”。这是始终使用None
名称作为0值的主要原因。
如果None
作为名称没有意义,这通常表示枚举设计或名称中的缺陷。在你的情况下,它听起来像枚举实际上表示值已经通过的步骤,而不是值的状态(标志枚举通常不会使用)。可能以下是您想要的更近的表示(关联类可能具有名为CompletedValueProcessingSteps
的属性)?
[Flags]
enum ValueProcessingSteps
{
None = 0,
Validation = 1,
Writing = 2
}
答案 1 :(得分:0)
如果0表示InvalidValueNonWritten,则将InvalidValueNonWritten添加到枚举中。然后这个警告不会发生。如果你真的不应该在你的枚举中使用0来抑制代码中的警告并确保你将理由放入以备将来参考。
如果由于0无效而期待异常,最好使用枚举在您的方法中执行验证。此外,这对于序列化更好,例如,如果您在模型上使用序列化,模型将使用源中缺少的成员反序列化。