고유하지 않은 열거형 값의 미스터리 공개
EDI 파일에서 인덱스 위치를 난독화하려고 시도하던 중 놀라운 발견이 이루어졌습니다. 동일한 열거형에 여러 값을 할당하는 기능. 겉보기에 이상해 보이는 이 동작은 그 뒤에 있는 논리와 잠재적인 의미에 대한 의문을 불러일으켰습니다.
Enum은 본질적으로 System.Enum에서 상속되는 구조체입니다. 뒤에서 열거형 값은 상수로 정의됩니다. 예를 들어, 다음 열거형 정의:
public enum Color { Red = 1, Blue = 1, Green = 1 }
는 다음 의사 코드와 사실상 동일합니다.
public struct Color : System.Enum { public const int Red = 1; public const int Blue = 1; public const int Green = 1; }
이것은 열거형이 본질적으로 동일한 상수의 모음임을 나타냅니다. 기본 가치. C#에서는 명시적 기본 클래스를 사용하여 구조체를 정의하는 것이 금지되어 있지만 이것이 바로 열거형 정의로 해석됩니다.
결과적으로 동일한 값을 가진 여러 상수가 있어도 본질적인 충돌이 발생하지 않습니다. 열거형. 그러나 이는 열거형으로 변환할 때 모호함을 초래할 수 있습니다. 예:
Color color1 = (Color)1; // Returns Red Color color2 = (Color)Enum.Parse(typeof(Color), "1"); // Also returns Red
color1과 color2에 모두 할당된 값은 기술적으로 Red가 아니라 1입니다. 그러나 인쇄하면 Red로 나타납니다.
또한 고유하지 않은 열거형을 비교하면 값을 사용하면 수수께끼 같은 결과가 나올 수 있습니다.
bool b = Color.Red == Color.Green; // True (Red is Green??)
비교가 논리적으로 올바르지 않은 것처럼 보일 수도 있지만 이는 기본 원칙에 따른 결과입니다. 값은 동일합니다.
결국 고유하지 않은 열거형 값을 사용하는 것은 판단의 문제입니다. 이 접근 방식을 활용하기 전에 위험과 이점을 신중하게 평가하는 것이 중요합니다.
위 내용은 여러 열거형 값이 C#에서 동일한 기본 값을 공유할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!