gpt4 book ai didi

c# - Enum.HasFlag 应该返回什么?

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:02 27 4
gpt4 key购买 nike

我有枚举:

[Flags]
enum Editions
{
Educational,
Basic,
Pro,
Ultra
}

为什么我会出现这种行为?

var x = Editions.Basic;
var y = Editions.Educational;
var test =x.HasFlag(y); // why is this true!?
// and!!!
var test2 = y.HasFlag(x); // this is false!

最佳答案

使用 [Flags] 时属性,您应该将枚举值显式映射到包含非重叠位模式的整数。也就是说,每个枚举值都应该映射到 2 的幂:

[Flags]
enum Editions
{
Educational = 1,
Basic = 2,
Pro = 4,
Ultra = 8
}

没有明确的编号,Educational将映射到 0 和 Basic到 1。

Enum.HasFlags检查参数中设置的一个或多个位字段是否也全部设置在测试枚举中。在你的情况下,x是 1 和 y是 0。这意味着 x包含 0 中设置的所有位(那根本就不是位)。然而0不包含 1 中设置的位当以相反的方式进行测试时。

关于c# - Enum.HasFlag 应该返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20057522/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com