반응형
열거형 변수의 기본값은 무엇입니까?
열거형 변수입니다. 항상 첫 번째 요소를 기본값으로 설정하는지 아는 사람이 있습니까?
값을 나타내는 열거형의 모든 구성원입니다.0특히 설명서에서 다음을 참조하십시오.
의 기본값
enum E식에 의해 생성된 값입니다.(E)0.
다음 열거형을 예로 들어 보겠습니다.
enum E
{
Foo, Bar, Baz, Quux
}
기본값을 재정의하지 않고 인쇄default(E)돌아온다Foo첫 번째 요소이기 때문에.
그러나 항상 그렇지는 않습니다.0열거형의 경우 첫 번째 멤버로 표시됩니다.예를 들어, 다음 작업을 수행할 경우:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
인쇄default(F)당신에게 줄 것입니다Quux,것은 아니다.Foo.
열거형에 요소가 없는 경우G에 해당하는.0:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)문자 그대로의 수익0그 유형은 그대로지만G(위 문서에서 인용한 대로, 주어진 열거형에 대한 캐스트).
열거된 값의 순서에 의존하고 첫 번째 값이 항상 기본값이라고 가정하는 것은 상당히 위험하다고 생각합니다.기본값을 보호하는 것이 중요한 경우 이 방법이 좋습니다.
enum E
{
Foo = 0, Bar, Baz, Quux
}
그렇지 않으면 주문의 부주의한 리팩터만 있으면 완전히 다른 기본값을 갖게 됩니다.
이 스니펫을 사용할 수 있습니다.
using System;
using System.Reflection;
public static class EnumUtils
{
public static T GetDefaultValue<T>()
where T : struct, Enum
{
return (T)GetDefaultValue(typeof(T));
}
public static object GetDefaultValue(Type enumType)
{
var attribute = enumType.GetCustomAttribute<DefaultValueAttribute>(inherit: false);
if (attribute != null)
return attribute.Value;
var innerType = enumType.GetEnumUnderlyingType();
var zero = Activator.CreateInstance(innerType);
if (enumType.IsEnumDefined(zero))
return zero;
var values = enumType.GetEnumValues();
return values.GetValue(0);
}
}
예:
using System;
public enum Enum1
{
Foo,
Bar,
Baz,
Quux
}
public enum Enum2
{
Foo = 1,
Bar = 2,
Baz = 3,
Quux = 0
}
public enum Enum3
{
Foo = 1,
Bar = 2,
Baz = 3,
Quux = 4
}
[DefaultValue(Enum4.Bar)]
public enum Enum4
{
Foo = 1,
Bar = 2,
Baz = 3,
Quux = 4
}
public static class Program
{
public static void Main()
{
var defaultValue1 = EnumUtils.GetDefaultValue<Enum1>();
Console.WriteLine(defaultValue1); // Foo
var defaultValue2 = EnumUtils.GetDefaultValue<Enum2>();
Console.WriteLine(defaultValue2); // Quux
var defaultValue3 = EnumUtils.GetDefaultValue<Enum3>();
Console.WriteLine(defaultValue3); // Foo
var defaultValue4 = EnumUtils.GetDefaultValue<Enum4>();
Console.WriteLine(defaultValue4); // Bar
}
}
언급URL : https://stackoverflow.com/questions/4967656/what-is-the-default-value-for-enum-variable
반응형
'programing' 카테고리의 다른 글
| 확장 메서드를 일반적이지 않은 정적 클래스에 정의해야 합니다. (0) | 2023.05.07 |
|---|---|
| MongoDB Shell에서 ISO 날짜에 일 추가/감산 (0) | 2023.05.07 |
| 이미 삭제한 대용량 파일 때문에 GitHub에 푸시할 수 없습니다. (0) | 2023.05.07 |
| 선택한 실행 대상이 이 작업에 적합하지 않습니다. (0) | 2023.05.07 |
| 구성원을 수동으로 사용하지 않는 방법 (0) | 2023.05.07 |