Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CA1008:枚举应具有零值和标志枚举_C#_.net_Enums_Fxcop_Enum Flags - Fatal编程技术网

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

C# CA1008:枚举应具有零值和标志枚举,c#,.net,enums,fxcop,enum-flags,C#,.net,Enums,Fxcop,Enum Flags,即使我完全了解CA1008警告存在的原因,我也不知道在以下情况下如何避免它。我有一个具有以下含义的标志枚举: ValidValue = 0x01 WrittenValue = 0x02 因此,在本例中,0表示InvalidValueNonWrite,而不是None。规则 不要禁止显示来自此规则的警告,以前已发布的标记属性枚举除外 在这种情况下,我没有提供枚举,因此如何防止此警告 编辑: 警告明确地说: 警告86 CA1008:Microsoft.Design:在枚举“XXX”中,将“XXX.I

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

ValidValue = 0x01
WrittenValue = 0x02
因此,在本例中,0表示InvalidValueNonWrite,而不是None。规则

不要禁止显示来自此规则的警告,以前已发布的标记属性枚举除外

在这种情况下,我没有提供枚举,因此如何防止此警告

编辑:

警告明确地说:

警告86 CA1008:Microsoft.Design:在枚举“XXX”中,将“XXX.InvalidValueNonWrite”的名称更改为“None”

编辑2:

枚举的更多状态:

CommandValue = 0x04 // Otherwise it is DataValue
InmediateValue = 0x08 // Otherwise it is Deferred

如果0表示InvalidValueNonWrite,则将InvalidValueNonWrite添加到枚举中。那么这个警告就不会发生了。如果确实不应该在枚举中包含0,请禁止在代码中显示警告,并确保将对正放在代码中以供将来参考


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

如果0表示InvalidValueNonWrite,则将InvalidValueNonWrite添加到枚举中。那么这个警告就不会发生了。如果确实不应该在枚举中包含0,请禁止在代码中显示警告,并确保将对正放在代码中以供将来参考


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

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

如果
None
作为名称没有意义,这通常表示枚举设计或名称中存在缺陷。在您的例子中,听起来好像枚举实际上表示值已通过的步骤,而不是值的状态(通常不使用标志枚举)。以下内容是否可以更接近您的意图(关联类可能有一个名为
CompletedValueProcessingSteps
)的属性)


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

如果
None
作为名称没有意义,这通常表示枚举设计或名称中存在缺陷。在您的例子中,听起来好像枚举实际上表示值已通过的步骤,而不是值的状态(通常不使用标志枚举)。以下内容是否可以更接近您的意图(关联类可能有一个名为
CompletedValueProcessingSteps
)的属性)



为什么不将0的
invalidValueNonWrite
?这不是你的枚举的默认状态吗?是什么阻止你提供一个合理的零值呢?@Nearoc程序员:检查编辑。规则说0应该是None,以模拟空值(unset)。@DanielJamesBryars:检查编辑。该规则规定0应为“无”,以模拟空值(unset)。枚举名称对编码的FxCop规则并不重要,但它可以向试图帮助您的人员提供相关信息。;)为什么不将0的
invalidValueNonWrite
?这不是你的枚举的默认状态吗?是什么阻止你提供一个合理的零值呢?@Nearoc程序员:检查编辑。规则说0应该是None,以模拟空值(unset)。@DanielJamesBryars:检查编辑。该规则规定0应为“无”,以模拟空值(unset)。枚举名称对编码的FxCop规则并不重要,但它可以向试图帮助您的人员提供相关信息。;)我已经这么做了,但警告还是发生了。规则规定该值应为None或Nothing。请检查编辑。我已经做了,警告仍然发生。规则规定该值应为None或Nothing。请检查编辑。首先感谢您的尝试,我很感激。第二种猜测是不对的,它们是完全不同的状态,没有连续的状态。一个值可以同时处于多个状态,我知道0应该是“未设置”的,但是我应该找到一种方法来表示当前由0表示的值。在任何情况下,我认为任何标志枚举都会有相同的问题,0总是有“无”以外的含义,你不这样认为吗?我添加了更多的状态,以更清楚地表明这是一个标志枚举。我没有假设步骤是连续的,也没有建议使用非标志枚举。我只是没有在示例代码上显示
FlagsAttribute
。如果“步骤”名称困扰您,只需将其从名称中删除即可。如果“处理”不相关,请尝试查找与使用方式相关但仍符合“无”0零值的名称。(也就是说,你在更新中添加的项目让我怀疑这些不应该都在一个枚举中。)抱歉,现在我明白你的意思了。它只是一个不同的命名模式,将导致有一个有效的None值。我查一下谢谢。首先
[Flags]
enum ValueProcessingSteps
{
    None = 0,
    Validation = 1,
    Writing = 2
}