C # 열거 형 : Nullable 또는 'Unknown'값?
enum
멤버 가있는 클래스가 있고이 멤버가 정의되지 않은 상황을 표현하고 싶다면 어느 것이 더 낫습니까?
a) nullable 형식을 사용하여 클래스에서 멤버를 nullable로 선언합니다. 예 :
public SomeEnum? myEnum;
b) 열거 형에 기본 '알 수없는'값을 추가합니다. 예 :
public enum SomeEnum {
Unknown,
SomeValueA,
SomeValueB,
SomeValueC,
}
어느 쪽이든 주요 장단점을 볼 수 없습니다. 그러나 아마도 하나가 다른 것보다 더 낫습니까?
nullable 값 유형을 확실히 사용하십시오. 그것이 바로 그 이유입니다. 그것은 당신의 의도를 명시 적으로 나타냅니다. 이는 또한 "가짜"값에 대해 걱정하지 않고 특정 값이 실제 값 인지 여부를 쉽게 판별하기 위해 Enum.IsDefined
(또는 일반 유형 안전성을 원하는 경우 Unconstrained Melody 의 동등한 값)을 사용할 수 있음을 의미합니다 .
부재 값과 "알 수 없음"값 사이에 실제 차이가 있다는 archimed7592에 동의합니다.
예:
"당신의 혈액형은 무엇입니까?"
Null = 값 없음-> 질문에 대한 답변이 없음-> 질문
"알 수 없음"-> 환자가 알지 못한다고 표시-> 혈액형 검사를 주문하십시오.
알 수없는 값을 나타내는 데 값이 필요한지 아니면 값이 없음을 나타내는 방법이 필요한지 결정하기 만하면됩니다.
알 수없는 값을 표시해야하는 경우 추가 열거 형 멤버가 해결책으로 좋습니다.
값이 없음을 나타내야하는 경우 nullable로 설정합니다.
"알 수없는"열거 형 멤버와 열거 형 자체가 동시에 nullable 인 것은 잘못된 것이 없다는 점을 명심하십시오.
HTH.
때에 따라 다르지!
Bill Wagner는 의미가있을 때 Undefined 를 추가해야하는 몇 가지 좋은 이유를 나열 enum
했습니다. 전체 항목을 찾는 것이 좋지만 다음은 미리보기입니다.
항목 8 : 0이 값 유형에 유효한 상태인지 확인
기본 .NET 시스템 초기화는 모든 개체를 모두 0으로 설정합니다. 다른 프로그래머가 모두 0으로 초기화 된 값 유형의 인스턴스를 만드는 것을 방지 할 수있는 방법은 없습니다. 유형에 대한 기본값으로 설정하십시오.
하나의 특별한 경우는 열거 형입니다. 유효한 선택 항목으로 0을 포함하지 않는 열거 형을 만들지 마십시오. 모든 열거 형은 System.ValueType에서 파생됩니다. 열거 형 값은 0에서 시작하지만 해당 동작을 수정할 수 있습니다.
이제 사용자가 ComboBox에서 일부 유형을 선택해야하거나 유형을 선택하지 않을 수있는 상황이 있습니다. [Description("a description")]
선택할 개체로 특성이 있는 열거 형을 사용하고 있습니다. none / Unknown이 열거 형에 대한 자연스러운 선택이면 아무것도 선택되지 않았 음을 나타내는 데 사용합니다. 그렇지 않으면 Nullable<MyEnum>
.
nullable이면 기본값으로 가져오고 null 일 때 사용하려고하면 예외가 발생합니다 (좋은 일입니다!).
열거 형이 [Flags]
Attribute 로 지정되면 모든 것이 변경됩니다 .
[Flags]
enum FlagsEnum
{
None = 0,
First = 1,
Second = 2,
Third = 4,
FirstAndThird = 5
}
참고 URL : https://stackoverflow.com/questions/1795657/c-sharp-enums-nullable-or-unknown-value
'Program Tip' 카테고리의 다른 글
정규식에서 / gi의 의미는 무엇입니까? (0) | 2020.12.01 |
---|---|
hasNext ()가 False인데 hasNextLine ()이 True 인 이유는 무엇입니까? (0) | 2020.12.01 |
MVVM : 라디오 버튼을 뷰 모델에 바인딩합니까? (0) | 2020.12.01 |
Php 소멸자 (0) | 2020.12.01 |
Go 객체의 포인터 값을 어떻게 인쇄합니까? (0) | 2020.12.01 |