-=
연산자가 enum
값에서 지원되는지 (그리고 그 이후부터) 알 수 있습니까? 내가 어떤 이유로, 이것은 플래그 enum
에서 값을 제외 쓴열거 및 빼기 연산자
내가 행복하게 오늘을 멀리 코딩 된 : 다시 읽고 내 코드를 평가 한 후
flags -= FlagsEnum.Value1;
, 나는 그것이 실제로 일을 컴파일 된 것을 놀랐습니다 .
flags = flags - FlagsEnum.Value1
로 문을 작성하지만 하지 컴파일을 수행합니다.
설명서 및 인터넷에서 지금까지 아무 것도 찾을 수 없었습니다. 또한 다른 연산자 (물론 비트 연산자 제외)는 지원되지 않습니다. +=
(플래그 포함), *=
(파스칼의 교집합)이 작동하지 않습니다.
이것은 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
그런 식으로 사용하면 꽤 안전하지 않습니다. 'FlagsEnum.Value1'이 이미'flags'에 들어있을 때만 enum으로 동작합니다. –
@Jaroslav : 나는 그것을 결코 그렇게하지 않는다. 그러나 그것은 단지 나의 손가락에서 굴러 떨어지게되었다.델파이 (좋은 집합 연산자가있는)에 그것을 비난했지만, 꽤 작았지만 (현재는 적지 만) 컴파일 된 것이 놀랍습니다. 그리고 Marc이 지적했듯이, 그 결과는 당신이 기대하는 것과 다를 수도 있습니다. –