有没有人知道(也许:从什么时候开始)-=运营商支持enum价值观?
今天我很乐意编写代码,因为我出于某种原因写了这个以从标志中排除一个值enum:
flags -= FlagsEnum.Value1;
Run Code Online (Sandbox Code Playgroud)
在重新阅读和评估我的代码之后,我很惊讶它编译实际上有效.
将陈述写为
flags = flags - FlagsEnum.Value1
Run Code Online (Sandbox Code Playgroud)
但也不能编译.
到目前为止,我在文档和互联网上找不到任何内容.此外,不支持其他运算符(当然除了位运算符):( +=包括标志),*=(Pascal中的交集)不起作用.
这是一些内置于C#编译器的语法糖吗?如果是这样,他们选择不包括其他运营商的任何理由?
一个简单的代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
[Flags]
enum FlagsEnum
{
None = 0,
Value1 = 1,
Value2 = 2,
Value3 = 4
}
class Program
{
static void Main(string[] args)
{
FlagsEnum flags = FlagsEnum.Value1 | FlagsEnum.Value2 | FlagsEnum.Value3;
Console.WriteLine(flags);
flags -= FlagsEnum.Value1;
Console.WriteLine(flags);
flags -= FlagsEnum.Value3;
Console.WriteLine(flags);
flags -= FlagsEnum.Value2;
Console.WriteLine(flags);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 25
Iirc,-仍然是整数减法.
要做排除,你想要:
value = value & ~SomeEnum.Flag;
Run Code Online (Sandbox Code Playgroud)
包含:
value = value | SomeEnum.Flag;
Run Code Online (Sandbox Code Playgroud)
同样,要测试部分匹配(来自Flag的任何位):
if((value & SomeEnum.Flag) != 0) {...}
Run Code Online (Sandbox Code Playgroud)
或完全匹配(Flag中的所有位):
if((value & SomeEnum.Flag) == SomeEnum.Flag) {...}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4580 次 |
| 最近记录: |