2012-01-25 2 views
0

C#을 주조하는 것은 당신이 그런C# 정수가 아닌 열거하고

public enum Animals 
{ 
    Dog = 0, Cat = 1, 
} 

로 열거 요소에 값을 할당하고 너무 그래서 같은 그들로부터 캐스트 할 수 있습니다.

public void demo() 
{ 
    int dog = (int)Animals.Dog; 
    Animals cat = (Animals)(dog++); 
} 

는하지만 C#을 또한 다시 밖으로 던지기와 Vector2를 얻을 수 없다 그러나이

public enum Animals 
{ 
    Dog = Vector2.One, Cat = Vector2.Zero, 
} 

등의 작업을 수행 할 수 있습니다.

Vector2 dog = (Vector2)Animals.Dog; //this fails 

이 문제가 해결 가능합니까? * Vector2은 클래스 객체이고 Vector2.OneVector2.Zero은 정적 선언입니다. Dog가 메모리 참조에 지정되었음을 의미합니다. 필수 유형 Vector2에서 암시 적 캐스트가있는 경우

+2

이 코드는 컴파일되지 않습니다. 'Vector2'는 int로 변환 가능해야합니다 (또는 정수 유형 인 enum의 다른 허용되는 기본 유형을 지정하는 경우) – BrokenGlass

+0

Vector2는 클래스가 아니며 구조체이며 값 유형 (사용자가 자신의 구현이 아닌 XNA Vector2를 사용한다고 가정). – smelch

+0

@BrokenGlass 흠, 내 Kreskin 모자 (http://www.amazingkreskin.com/)도 청소부에 있습니다! ;-) –

답변

2

C#을 사용하면

public enum Animals 
{ 
    Dog = Vector2.One, 
    Cat = Vector2.Zero 
} 

을 할 수있게된다있는 유일한 방법입니다. 그렇지 않으면 컴파일 오류가 발생합니다. 따라서 Vector2으로 다시 전송할 수 없습니다. int에서 Vector2으로 캐스트가 전송되지 않습니다. DogCat은 정수 값이며, 값은 Vector2.OneVector2.Zero에서 int까지의 암시 적 캐스트에서 각각옵니다.

작동시키기 위해 자신의 명시 적 형변환을 정의 할 수는 있지만 원하는 방식으로 모든 정보를 다시 얻을 수는 없을 것입니다.

+0

이것은 사실입니다. 컴파일러가 아닌 사전 컴파일러를 통과했습니다. 이것은 이제 더 이해가됩니다. – ohmusama

관련 문제