문제

c# enums typeafe입니까?

의미가 없다면 의미는 무엇입니까?

도움이 되었습니까?

해결책

약간 다른 대답을 제공하려면 ... 값은 캐스팅 관점에서 유형 안전이지만, 캐스트 된 후에는 여전히 검사되지 않습니다 - 즉

enum Foo { A = 1, B = 2, C = 3 }    
static void Main()
{
    Foo foo = (Foo)500; // works fine
    Console.WriteLine(foo); // also fine - shows 500
}

이러한 이유로, 당신은 값을 확인해야합니다 - 예를 들어 default 안에 switch 그것은 예외를 던진다.

또한 (비[Flags] 값) via :

bool isValid = Enum.IsDefined(typeof(Foo), foo);

다른 팁

예, 그들은입니다.

다음은 왔습니다 http://www.csharp-station.com/tutorials/lesson17.aspx

열거는 상수를 강하게 입력합니다. 이들은 기본적으로 고유 한 유형이며 상징적 이름을 적분 값에 할당 할 수 있습니다. C# 전통에서, 그것들은 강하게 입력되며, 이는 멤버의 기본 값이 동일하더라도 한 유형의 열거가 다른 유형의 열거에 암시 적으로 할당되지 않을 수 있음을 의미합니다. 동일한 선을 따라 적분 유형과 열거는 암시 적으로 교환 할 수 없습니다. 다른 열거 유형과 적분 유형 사이의 모든 과제에는 명시적인 캐스트가 필요합니다.

enum을 사용하도록 제안하는 사람들은 인수 검증을 수행하기 위해 정의되었습니다 ...하지 마십시오! Brad Abrams 당 ( 프레임 워크 설계 가이드 라인 열거 설계에 대한 업데이트):

enum.isdefined ()에는 실제로 두 가지 문제가 있습니다. 먼저 반사와 콜드 타입 메타 데이터가 많이 있습니다. 둘째, 메모가 암시되면서 여기에는 버전 문제가 있습니다.

예, 그들은입니다.

열거는 상수를 강하게 입력합니다. 이들은 기본적으로 고유 한 유형이며 상징적 이름을 적분 값에 할당 할 수 있습니다. C# 전통에서, 그것들은 강하게 입력되며, 이는 멤버의 기본 값이 동일하더라도 한 유형의 열거가 다른 유형의 열거에 암시 적으로 할당되지 않을 수 있음을 의미합니다. 동일한 선을 따라 적분 유형과 열거는 암시 적으로 교환 할 수 없습니다. 다른 열거 유형과 적분 유형 사이의 모든 과제에는 명시적인 캐스트가 필요합니다.

예.

C#: 열거 유형 :

-명명 된 값의 유형-안전 열거.

-예약 프로그램 프로그래밍 오류

-사용자는 기본 유형을 제어 할 수 있습니다 (기본값으로 int)

또한 기본 값을 제어 할 수 있습니다

기본 값 (int, long 등)으로 열거를 나타낼 수 있기 때문에 기술적으로 아니오. 그러나 제공된 이름으로 열거를 사용하는 경우 참조를 업데이트하지 않고 열거 된 값의 이름을 변경하면 컴파일 타임 오류가 수신됩니다. 이와 관련하여 예는 안전한 유형입니다.

나는 여기 파티에 늦었지만 약간의 여분의 것을 버리고 싶었습니다 ... .NET 프레임 워크 설계 지침 Cwalina Krzysztof에서. 유효한 값이 열거에 전달되는지 확인하기 위해 위의 훌륭한 팁 외에도 효과적으로 사용하는 방법에 대한 다른 지침과 조언을 제공합니다 (특히 관련 Flags 열거) 등

예, 그들은 강하게 유형 된 안전을 할 수 없다. Console.WriteLine (E);

C# 열거는 유형의 안전한 의미입니다

  1. 기본 유형에서 실제 열거로 암시 적으로 변환 할 수 없습니다.
  2. 또한 두 열거의 기본 유형이 동일하더라도 하나의 열거 값을 다른 열거 값에 할당 할 수 없습니다. 명백한 캐스트는 항상 필요합니다.
  3. 열거는 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다.

나는 그들의 유형의 안전한 특성을 추출하는 열거에 대한 훌륭한 비디오 자습서를 거부했다. 보세요 여기 그리고 거기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top