在 C 我做过这种事情
enum { USE_COKE = 1,
USE_PEPSI = 2,
USE_JUICE = 4,
USE_WATER = 8 };
int makeDrink(int flags);
//...
int rcode = makeDrink(USE_COKE | USE_JUICE | USE_WATER);
Run Code Online (Sandbox Code Playgroud)
我知道这是非常标准的,它也用于iostream例如。我想知道如何将这种设计模式翻译成 Java 或 OOP?我很确定多态性不是这里的方法,因为我的代码有一个if(flag_is_set)块比重写大部分例程更好。是否有实用程序Flags类,或使用配置对象、一个enum或一堆整数等执行此操作的首选方法。
在研究错误的原因时,我遇到了这行代码:
Status |= (int)states.Reading;
Run Code Online (Sandbox Code Playgroud)
C#中的"| ="运算符是什么?
因此"状态"定义如下:
public static int Status
Run Code Online (Sandbox Code Playgroud)
...使用存取器和mutator(或"getter"和"setter"),而"states"以这种方式定义:
[Flags]
public enum states
Run Code Online (Sandbox Code Playgroud) 萨拉姆.我有这个标志枚举:
public enum DataAccessPoliceis
{
None = 0,
A = 1,
B = 2,
C = 4,
D = 8,
E = B | C | D, // 14
All = A | E // 15
}
Run Code Online (Sandbox Code Playgroud)
我想从int值获取int值(或复杂枚举项的int值列表):
int x = 9; // enum items => D | A
List<int> lstEnumValues = ???
// after this line ...
// lstEnumValues = { 1, 8 }
// and for x = 15
// lstEnumValues = { 1, 2, 4, 8, 14, …Run Code Online (Sandbox Code Playgroud) 我有一组标记的枚举,如下所示:
[Flags]
enum EnumThing
{
A = 1,
B = 2,
C = 4,
D = 8
}
Run Code Online (Sandbox Code Playgroud)
我想使用LINQ选择集合中的所有标志。假设集合是这样的:
EnumThing ab = EnumThing.A | EnumThing.B;
EnumThing ad = EnumTHing.A | EnumThing.D;
var enumList = new List<EnumThing> { ab, ad };
Run Code Online (Sandbox Code Playgroud)
按位显示如下:
0011
1001
Run Code Online (Sandbox Code Playgroud)
预期的结果是这样的:
1011
Run Code Online (Sandbox Code Playgroud)
可以通过以下代码在普通C#中实现所需的结果:
EnumThing wishedOutcome = ab | ad;
Run Code Online (Sandbox Code Playgroud)
或在SQL中
select 3 | 9
Run Code Online (Sandbox Code Playgroud)
但是,如何在enumList使用Linq的过程中选择所有选中的标志EnumThing?
我有这个标志枚举:
public enum AssignmentType
{
None = 0,
Attendant = 1,
ConductorCBS = 2,
ReaderCBS = 4,
Chairman = 8,
Mike = 16,
PlatformAttendant = 32,
Prayer = 64,
OCLM = 128,
Sound = 256,
Student = 512,
Custom = 1024,
Demonstration = 2048,
Assistant = 4096
}
Run Code Online (Sandbox Code Playgroud)
我现在想测试我的变量是否有特定的标志条件。
我想确定我的变量只是以下各项的任意组合:
NoneStudentAssistantDemonstration因此,如果它具有任何其他枚举值,则该变量将无法满足测试要求。
首先,我从这里开始:
bool bIsPersonnel = true;
if (_Assignments == AssignmentType.None ||
_Assignments == AssignmentType.Demonstration ||
_Assignments == AssignmentType.Student ||
_Assignments == AssignmentType.Assistant ||
_Assignments …Run Code Online (Sandbox Code Playgroud) 在 C# 中(使用 Unity 处理游戏)我有一个带有 [Flag] 属性的枚举。我已经实例化了两次。我想要一种比较两个枚举的方法。特别是如果 enum A(将有多个标志)包含来自 enum B 的标志(它只会被分配一个标志)。
我不想将单个实例化的枚举与单个标志进行比较(这已被多次回答)。
我怀疑我可以通过使用 GetValue 转储值并在 foreach 循环中比较这些值来做到这一点,但似乎应该有更直接的比较方法。
public enum AbilityType
{
None = 0,
Pierce = 1<<1,
Blunt = 1<<2,
Slash = 1<<3,
Water = 1<<4,
// etc.
};
public class Ability : MonoBehaviour
{
public AbilityType abilityType;
}
Run Code Online (Sandbox Code Playgroud)
public class AbilitiedObject : StatisticalObject
{
public AbilityType resistances;
protected override void Awake()
{
base.Awake();
resistances = AbilityType.Pierce | AbilityType.Water;
}
public void TakeDamage(int damageAmount, AbilityType abilityType)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个 [Flags] 枚举,其中包含我想要收集的一些数据点。我的目标是将每个值(每个位)显示并绑定为单独的复选框以供用户检查。但是,我不知道如何将 Flags 枚举的各个值绑定到组件,也不知道是否可能。为了更好地解释我的观点:
说这是我的枚举:
[Flags]
public enum DataPoints{
Large = 1,
Soft = 2,
Green = 4,
Round = 8
}
Run Code Online (Sandbox Code Playgroud)
然后我希望表单的 DataPoints 类型模型中有一个可以保存这些值的属性:
//possible data points like:
// 9: Round and Large
// 6: Soft and Green
public DataPoints Data;
Run Code Online (Sandbox Code Playgroud)
我在想类似以下的内容,但我认为您不能将枚举的各个值/位绑定到这样的组件:
@foreach (DataPoints datum in Enum.GetValues(typeof(DataPoints)))
{
<CheckBox @bind-Value="what? Data.datum?"></CheckBox>
}
Run Code Online (Sandbox Code Playgroud) 我想做这样的事,但我不能:
[Flags]
enum SomeEnum : int
{
None = 0,
A,
B,
C
}
SomeEnum en = SomeEnum.A;
en <<= 1; //Expect en == SomeEnum.B but I recieve an error here
Run Code Online (Sandbox Code Playgroud)
为了做到这一点?
即使我完全知道CA1008警告存在的原因,我也不知道在下列情况下如何避免它.我有一个具有以下含义的Flag枚举:
ValidValue = 0x01
WrittenValue = 0x02
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,0表示InvalidValueNonWritten而不是None.规则说
除了先前已发布的标记属性枚举之外,请勿禁止此规则发出警告.
在这种情况下,我没有发送枚举,所以如何防止此警告?
编辑:
警告明确说:
警告86 CA1008:Microsoft.Design:在枚举"XXX"中,将"XXX.InvalidValueNonWritten"的名称更改为"无".
编辑2:
枚举的更多状态:
CommandValue = 0x04 // Otherwise it is DataValue
InmediateValue = 0x08 // Otherwise it is Deferred
Run Code Online (Sandbox Code Playgroud) 说我有以下枚举
[Flags]
enum Letters
{
A = 1,
B = 2,
C = 4,
D = 8,
E = 16,
F = 32,
AB = A | B,
All = A | B | C,
}
Run Code Online (Sandbox Code Playgroud)
如果我有变量:
var s = Letters.A | Letters.B | Letters.D;
var p = Letters.A | Letters.C | Letters.D | Letters.E;
Run Code Online (Sandbox Code Playgroud)
我想要的是获得这两个枚举之间的共同值,所以在这种情况下它应该是A | D.有人可以告诉我如何实现这一目标.
谢谢