在 C# 中,我有以下枚举。我希望能够运行我的验证函数并返回通过所述枚举发现的问题,但它似乎总是包含 OK。
我读到的所有内容都说使用 0 表示无,至少对我来说,这在逻辑上似乎等同于 OK,因为不存在“无”问题。但如果我检查“enum.HasFlag(ValidationResult.OK)”,它将 100% 地返回 true,无论设置了多少其他值。我觉得如果它不等于0,就不应该说它等于。这对我来说似乎很糟糕。
处理这个问题的正确方法是什么?
[Flags]
public enum ValidationResult
{
OK,
NotOK,
ReallyNotOk
}
Run Code Online (Sandbox Code Playgroud)
void Main()
{
var x = ValidationResult.OK;
Console.Write(x.HasFlag(ValidationResult.OK)); // true
var y = ValidationResult.NotOk;
Console.Write(y.HasFlag(ValidationResult.OK)); // still true for some reason
}
Run Code Online (Sandbox Code Playgroud)
0不是旗帜,而是完全没有旗帜。Ok如果标志代表不同类型的故障,那么将标签赋予...可能是合适的,0但它仍然不是标志并且无法使用 进行测试HasFlag。
Console.Write(y == ValidationResult.OK); // works correctly
Run Code Online (Sandbox Code Playgroud)