- 열거 형 클래스에는 연산자가 없기 때문에, 그리고 나 방출 된 코드가 어떤 사업자 노출 않습니다박스형 열거의 적분 값을 가져
object boxedEnum = MyEnum.Flag1 | MyEnum.Flag2;
boxedEnum &= ~MyEnum.Flag2; // Remove the flag.
을 그래서 현재 다음 (상당)하고있는 중이 야
:
: 잘 작동int boxedEnumValue = (int) boxedEnum;
boxedEnumValue &= ~MyEnum.Flag2;
boxedEnum = Enum.ToObject(boxedEnum.GetType(), boxedEnumValue);
는 유일한 문제는 정수로 boxedEnum을 설정하기 위해 해당 코드가 있다는 것입니다
당신이 동의 할 것이라고 확신하는 사람은 끔찍하고 해커입니다.
그래서이 질문에는 두 가지 갈래가 있습니다. 누군가가 나를 틀리게 증명할 수 있고 박스형 열거 형에서 이진 연산을 수행 할 수있는 방법을 제공한다면 정말 멋질 것입니다. 그렇지 않으면 문자열 왕복을 피할 수있는 방법이 인정 될 것입니다.
Guffa 내가 enum을 특정 유형으로 변환하기 위해 필요한 것을 알려주었습니다.
/// <summary>
/// Gets the integral value of an enum.
/// </summary>
/// <param name="value">The enum to get the integral value of.</param>
/// <returns></returns>
public static T ToIntegral<T>(this object value)
{
if(object.ReferenceEquals(value, null))
throw new ArgumentNullException("value");
Type rootType = value.GetType();
if (!rootType.IsEnum)
throw new ArgumentOutOfRangeException("value", "value must be a boxed enum.");
Type t = Enum.GetUnderlyingType(rootType);
switch (t.Name.ToUpperInvariant())
{
case "SBYTE":
return (T)Convert.ChangeType((sbyte) value, typeof(T));
case "BYTE":
return (T) Convert.ChangeType((byte) value, typeof(T));
case "INT16":
return (T) Convert.ChangeType((Int16) value, typeof(T));
case "UINT16":
return (T) Convert.ChangeType((UInt16) value, typeof(T));
case "INT32":
return (T) Convert.ChangeType((Int32) value, typeof(T));
case "UINT32":
return (T) Convert.ChangeType((UInt32) value, typeof(T));
case "INT64":
return (T) Convert.ChangeType((Int64) value, typeof(T));
case "UINT64":
return (T) Convert.ChangeType((UInt64) value, typeof(T));
default:
throw new NotSupportedException();
}
}
불행히도 나는 할 수 없다. 어떤 종류의 열거 형을 받아 들일 필요가있는 도우미 메서드입니다. –
기본 형식이 enum 인 경우 int에 상자를 unbox하고 int에 boxing 할 수 있습니다. boxed int는 나중에 열거 형에서 unbox 될 수 있습니다. – Guffa
@Guffa you 천재! 내가 받아 들일 수 있도록 답을 편집 할 수 있습니까? –