내가이를 위해 C#에서 열거하는 문자열에서 사이 명시 적 캐스트를하고 싶은 열거 형 :C#을 명시 적 캐스트 문자열은
(MyEnum) Enum.Parse(typeof(MyEnum),stringValue)
내가 명시 적 캐스트 연산자로이 추방 싶습니다 나는 이것을했지만 작동하지 않았다.
.NET 3.5를 사용하는 것이 가능한지 알고 있는가?
내가이를 위해 C#에서 열거하는 문자열에서 사이 명시 적 캐스트를하고 싶은 열거 형 :C#을 명시 적 캐스트 문자열은
(MyEnum) Enum.Parse(typeof(MyEnum),stringValue)
내가 명시 적 캐스트 연산자로이 추방 싶습니다 나는 이것을했지만 작동하지 않았다.
.NET 3.5를 사용하는 것이 가능한지 알고 있는가?
캐스트 할 수 없습니다. 문제는 사용자 정의 변환이 구조체 또는 클래스 선언에 포함되어야하며 변환은 둘러싸는 유형으로 또는에서 이루어져야한다는 것입니다. MyEnum
도 string
도 이제까지 바깥 쪽 유형이 될 수 있기 때문에,
public static explicit operator MyEnum(string value)
는 불가능하다.
ECMA334 C# 1 규격의 관련 섹션 17.9.4이다
A 변환 연산자 반환에 의해 표시되는 목표 입력하려면 변환 연산자의 파라미터 유형에 의해 지시 된 소스 유형으로부터 변환유형은 변환 연산자입니다. 클래스 또는 구조체는 이 모두있는 경우에만 소스 유형 S에서 대상 유형 T 로의 변환을 선언하도록 허용 된 입니다. 여기서 S0 및 T0은 후행을 제거하여 생성되는 유형입니까? S와 T의 수정 자 (있는 경우) :
S0와 T0은 다른 유형입니다.
S0 또는 T0은 연산자 선언이 수행되는 클래스 또는 구조체 유형입니다 ().
S0 또는 T0이 인터페이스 유형이 아닙니다. 사용자 정의 변환을 제외
, 변환은 문자열 클래스의 확장 방법을 할 수있는, S에서 T 또는 T에서 그러나
S.
에 존재하지 않습니다.public static class StringExtensions {
public static T ConvertToEnum<T>(this string value) {
Contract.Requires(typeof(T).IsEnum);
Contract.Requires(value != null);
Contract.Requires(Enum.IsDefined(typeof(T), value));
return (T)Enum.Parse(typeof(T), value);
}
}
캐스트 연산자를 사용해야합니까? 또 다른 옵션은 문자열의 확장 메서드를 추가하는 것입니다.
public static class StringEnumConversion
{
public static T Convert<T>(this string str)
{
return (T)Enum.Parse(typeof(T), str);
}
}
"StringValue"속성을 사용하여 원하는 것을 얻을 수도 있습니다.
이 질문을 확인하십시오 : stackoverflow.com/questions/424366/c-string-enums 거기에 도움이 될만한 정보가 많이 있습니다.
건배
큰 답변입니다! 나는 어딘가에서 그것을 보았고 이것을 어떻게 작동시키는 지 기억하지 못했다. 감사! –
훌륭한 확장! 많은 사람들은 값이 열거 형에 정의되어 있는지 확인하는 것을 잊어 버립니다. – Gromer
@ Gromer 나는 그 이유에 대해 언급할만한 가치가 있다고 생각한다 .Net 4.0은 바로 그 이유 인 Enum.TryParse()에 대한 메소드를 추가했다. – Dan