Кто-нибудь знает (и возможно: с каких пор) оператор -=
поддерживается для значений enum
?
Я с радостью писал сегодня, когда по какой-то причине написал это, чтобы исключить значение из флагов enum
:
flags -= FlagsEnum.Value1;
После перечитывания и оценки моего кода я был удивлен, что он скомпилирован на самом деле.
Запись заявления как
flags = flags - FlagsEnum.Value1
однако не компилируется.
Пока что я не смог найти ничего в документации и в интернете. Кроме того, другие операторы (кроме битовых операторов, конечно) не поддерживаются: +=
(включая флаг), *=
(пересечение в 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();
}
}
}