gpt4 book ai didi

c# - 当 [Flags] 枚举类型没有定义它时,我应该如何表示 None 的值?

转载 作者:太空狗 更新时间:2023-10-30 01:17:49 24 4
gpt4 key购买 nike

今天在使用 XNA 时,我注意到使用 [Flags] 的枚举类型之一没有 None = 0 值:

[Flags]
public enum Buttons
{
DPadUp = 1,
DPadDown = 2,
DPadLeft = 4,
DPadRight = 8,
Start = 16,
Back = 32,
LeftStick = 64,
RightStick = 128,
LeftShoulder = 256,
RightShoulder = 512,
BigButton = 2048,
A = 4096,
B = 8192,
X = 16384,
Y = 32768,
LeftThumbstickLeft = 2097152,
RightTrigger = 4194304,
LeftTrigger = 8388608,
RightThumbstickUp = 16777216,
RightThumbstickDown = 33554432,
RightThumbstickRight = 67108864,
RightThumbstickLeft = 134217728,
LeftThumbstickUp = 268435456,
LeftThumbstickDown = 536870912,
LeftThumbstickRight = 1073741824,
}

根据关于 proper use of the [Flags] attribute 的 MSDN:

Do name the zero value of flags enumerations None. For a flags enumeration, the value must always mean all flags are cleared.

如果我想在没有按下任何按钮的情况下指示一个值,使用值 0 并将其转换为 Buttons 是否会违反枚举类型的意图?根据设计指南,它应该有这个值,但它没有。

最佳答案

是的。因为它是一个 Flags 枚举,所以没有设置任何可能值的状态将是 (Buttons)0(或 default(Buttons) 如果您希望以某种方式直接在您的代码中反射(reflect)类型来指示它),无论该类型的设计者是否为其分配了名称。

考虑一下,如果我们可以通过 Buttons.A & ~Buttons.A 和结果表达“没有不是 A 按钮被按下的按钮,也没有按下 A 按钮”将是 (Buttons)0。 “未按下按钮”状态已经是 0

(我能想到的省略 None 的一个理由是,您打算在 None 是按下的值的情况下永远不会使用类型。例如,您仅将此用于对按下按钮使用react的代码,因此 None 永远不会出现。即使这样,也可以找到使用 None/ 0 值在代码中很有用,但它可能意味着不命名更合理)。

关于c# - 当 [Flags] 枚举类型没有定义它时,我应该如何表示 None 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299012/

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