这是一个数学问题,但我确信这必须出现在一些编程场景中,至少我希望如此,我想知道是否有这种情况的名称:
假设我有一个系列中的7个项目.为了这个例子,让我们使用一周中的几天.我希望用户提交他们计划在下一周进入的一周中的哪几天.它们带有一系列标准复选框,每周一个.
我想将它们在一个数据库字段中选择的日期存储为单个整数.
显然,我可以为每天分配一个数字,1 - 7(如果用户未选中所有选项,则保留0).但是如果一个用户选择星期一和星期二(1 + 2)而另一个用户选择星期三(3),那么我会遇到问题.
我还可以给一周中的每一天都有一些奇怪的独特之处,这样任何数字组合都不可能与任何其他组合相同.
我的希望是,不是为第二个场景组成这样一个系列,而是已经存在一些数字属性(可能是系列中每个数字的平方等),这些属性已经得到充分利用和尊重.理想情况下,这对编程来说非常熟悉,导出各个数字只需要很少的通用编程语言开销(在我的例子中是PHP).
我只是梦想这个,还是做这样的事情?
我有以下枚举:
[Flags]
public enum Permissions
{
None = 0x0000,
All = 0xFFFF
}
Run Code Online (Sandbox Code Playgroud)
如果引发None或All,则不应引发其他标志.
如何检查无或全部是否被引发而没有其他内容?
我有这个标志枚举:
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) 背景:按位枚举对于"更易读"的比较和检查非常有用:即OpenFile(write | append).
我已经看到了几种在C#中声明按位枚举的方法,但是最近其中一种常见模式似乎不再返回唯一值,我想知道我是在宣告它是错还是有些东西已经改变了.我在谈论"DWORD"(十六进制?)样式(如下所示),在VS2012 RC中枚举时,值为1,2,3,4 ...而不是预期的逐位加倍.
其他人可以重现这个吗?我发布了用于验证的代码以及控制台输出; ComparisonsDword正如您可以通过"标记枚举,带有DWORD的显式值"的输出所看到的那样发生奇怪的行为.
没有标志,正常的枚举
/// <summary>
/// How to compare filter values; no underlying type declared, not flag
/// </summary>
public enum ComparisonsNotInt {
[Description("x")]
None
,
[Description("!=")]
NotEqual
,
[Description("=")]
Equal
,
[Description(">")]
GreaterThan
,
[Description("<")]
LessThan
,
/// <summary>
/// Combination of <see cref="Equal"/> and <see cref="LessThan"/>
/// </summary>
[Description("<=")]
LessThanOrEqual = (Equal | LessThan)
,
/// <summary>
/// Combination of <see cref="Equal"/> and <see cref="GreaterThan"/>
/// </summary>
[Description(">=")]
GreaterThanOrEqual …Run Code Online (Sandbox Code Playgroud) 给出一个包含4个元素的枚举
enum fontType {bold,italic,underlined,struck}
Run Code Online (Sandbox Code Playgroud)
此枚举类型的两个变量名为enum1和enum2,分配如下
fontType enum1=fontType.bold | fontType.italic;
fontType enum2=fontType.underlined & fontType.struck;
Run Code Online (Sandbox Code Playgroud)
为什么输出上的enum1 ='italic'和enum2 ='underlined'?
这可能听起来像一个奇怪的问题,我觉得简短的回答是'不'.
但是,基于布尔运算符,变量是否可以采用多个值?例如:
//Current implementation
string Variable1 = "A";
string Variable2 = "B";
string Variable3 = "C";
//Sought after implementation
string Variable = "":
Variable = "A" || Variable = "B" || Variable = "C";
Run Code Online (Sandbox Code Playgroud)
这看起来不太可行,特别是因为布尔运算符不能应用于字符串类型,因为,嗯......它们不是布尔值.
我有一个类似以下的场景,我有一个枚举,我得到了一些经过解析的文本,以创建一个枚举的列表,我想将其传递到ReportResults中,该列表将根据传递的标记来创建电子邮件。我没有访问以更改枚举或ReportResults方法,是否可以传递诸如resultFlags变量之类的内容?有没有一种方法可以使用Enum.TryParse创建要传递的单个项目?(在某些时候,序列化需要这样的东西)
[Flags]
public enum Result
{
None = 0,
Warning = 2,
Error = 4,
Success = 8,
Failure = 16
}
public void ProcessResultValues(string log)
{
var resultFlags = new List<Result>();
/// Process log text, add Result flags to the resultFlags list
ReportResults(resultFlags);
}
public void ReportResults(Result results)
{
/// Based on the flags, generate a text to describe if the process succeeded or failed and if there were any warnings or errors encountered during processing.
}
Run Code Online (Sandbox Code Playgroud) 我有这样的情况:
拿到 enum
enum MyType{
None = 0,
First = 1,
Second = 2,
Third = 4,
//and so on
}
Run Code Online (Sandbox Code Playgroud)
现在我不想检查给定的数字是否是二进制和的结果
int givenNumber = 3;
int result =
//how to get that it's sum of 2 enums in this particular case would be (int)Type.First & (int)Type.Second == 3;
Run Code Online (Sandbox Code Playgroud)
希望我的问题足够清楚,有人可以帮助解决这个问题.
编辑
枚举值始终由2提供
我想写一个方法,应该检查给定的数字可以是一个不同的二元和例子:int givenNumber = 1; //1 , 3 ,5 and 7 will be the answer
在我的c#windows商店应用程序中,我有以下代码行来检测是否按下了CTRL键.我从在线样本中获得了这个代码,它运行得很好.
var state = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Control);
if ((state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down)
{
// do something with e.Key
}
Run Code Online (Sandbox Code Playgroud)
具体来说,我以前从未见过if语句中的语法.
+用于添加整数或串联字符串,而&&用于组合2个布尔表达式,那么在这个上下文中做什么和做什么?
我有以下内容enum:
[Flags]
public enum Status { Nominal, Modified, DirOneOnly, DirTwoOnly, DirOneNewest, DirTwoNewest }
Run Code Online (Sandbox Code Playgroud)
我试图看看该Modified位是否已设置为true并尝试了以下方法:
if(_stateFlags.HasFlag(Status.Modified))
{
//DoStuff
} //Found out why this doesn't work after reading docs.
Run Code Online (Sandbox Code Playgroud)
和
if((_stateFlags & Status.Modified) == Status.Modified)
{
//DoStuff
}
Run Code Online (Sandbox Code Playgroud)
后者是我进一步研究使我相信会起作用的方法.但是,当我这样做时_stateFlags = Status.DirTwoOnly,上述陈述仍然似乎在评估true哪个让我感到困惑.
我做了一些根本错误的事吗?
在Security Cryptography X509Certificates的上下文中,我在其中一个项目代码中遇到了这个问题.
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
这是什么"|" 管意味着什么?