C#에서는 이제 default(Foo)
을 사용하여 클래스의 "채워지지 않은"/ 빈 인스턴스를 인식 할 수 있습니다. 정확히 new Foo()
과 같은지 확실하지 않습니다. 많은 라이브러리 클래스도 비슷한 인스턴스를 반환하는 Foo.Empty
속성을 구현합니다. 물론 모든 참조 유형은 null
을 가리킬 수 있습니다. 그래서 정말로, 차이점은 무엇입니까? 언제 옳고 그른가? 무엇이 더 일관성이 있고, 더 잘 수행됩니까? 어떤 객체가 개념적으로 "황금 시간대에 준비되지 않았는지"를 검사 할 때 어떤 테스트를 사용해야합니까? 누구나 Foo.IsNullOrEmpty()
이있는 것은 아닙니다.기본값 (Foo), Foo.Empty 또는 null을 사용해야합니까?
답변
default(Foo)
널을 반환한다. 제네릭은 모두 가치와 참조 유형을 지원 할 수 있도록 그것은 언어에 추가 - 더 info at MSDN
사용하면 SomeClass<T>
또는 MyMethod<T>
의 컨텍스트에서 T를 테스트하는 당신은 T 값 수 있을지 모른다 default(Foo)
유형, 클래스 유형 또는 구조체.
null은 "unknown"을 의미하고 "empty"는 "empty this is empty"를 의미해야합니다. 진정으로 비어 있지만 null이 아닌 클래스의 인스턴스가 필요하면 Foo.Empty 패턴을 사용하십시오. 예 : 일부 변수를 빈 문자열로 초기화해야하는 경우 ""
대신 String.Empty
을 입력하십시오.
참조 유형 (클래스)으로 작업하고 있으며 제네릭이 없으며 초기화되지 않은 참조를 명시 적으로 테스트하고있는 경우 null을 사용하십시오.
default(Foo)
은 값 유형과 참조 유형 모두에서 작동합니다. New Foo(), null
및 Foo.Empty()
하지 않습니다. 따라서 일반적인 유형의 사용에 적합합니다 (예 : 상대방을 모를 때). 하지만 대부분의 레퍼런스 유형의 경우 null
이면 충분합니다. Foo
가 Foo
이 값 유형 (예 : 정수)이고 클래스 타입, 제로 및 Foo
이 구조체이다 그들의 각 default()
값으로 초기화 된 모든 필드 Foo
의 인스턴스 인 경우
관련된 실제 유형을 알고 있거나 ": class"로 제한된 유형 매개 변수가있는 경우 알려진 값 (null, 0 등)을 사용하는 것이 가장 간단합니다.
기준 유형이 아닌 제약이 있거나 제한된 유형 매개 변수가있는 경우 기본값 (T)을 사용해야합니다.
Foo 란 무엇입니까? 각 유형마다 다른 기본값이 있습니다! – azamsharp