有誰知道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();
}
}
}
你確定它確實有效嗎?你可能被欺騙的事實,減法會出現排除位。你有沒有試過它在一個標誌變量的位對應的Value1已經是0? – Tormod 2011-03-12 18:36:03
像這樣使用它是非常不安全的。當'FlagsEnum.Value1'已經在'flags'中時它只能作爲enum使用。 – 2011-03-12 18:49:57
@Jaroslav:我從來沒有這樣做過,但它恰好是從我的手指中滾出來的。我把它歸咎於德爾福(以其優秀的集合運算符),但我相當(雖然現在更少)驚訝於它編譯。而且,正如Marc所指出的那樣,結果可能不是你期望的結果。 – 2011-03-12 18:58:09