2008-10-09 12 views
3

C#에서는 이제 default(Foo)을 사용하여 클래스의 "채워지지 않은"/ 빈 인스턴스를 인식 할 수 있습니다. 정확히 new Foo()과 같은지 확실하지 않습니다. 많은 라이브러리 클래스도 비슷한 인스턴스를 반환하는 Foo.Empty 속성을 구현합니다. 물론 모든 참조 유형은 null을 가리킬 수 있습니다. 그래서 정말로, 차이점은 무엇입니까? 언제 옳고 그른가? 무엇이 더 일관성이 있고, 더 잘 수행됩니까? 어떤 객체가 개념적으로 "황금 시간대에 준비되지 않았는지"를 검사 할 때 어떤 테스트를 사용해야합니까? 누구나 Foo.IsNullOrEmpty()이있는 것은 아닙니다.기본값 (Foo), Foo.Empty 또는 null을 사용해야합니까?

+0

Foo 란 무엇입니까? 각 유형마다 다른 기본값이 있습니다! – azamsharp

답변

16

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을 사용하십시오.

2

default(Foo)은 값 유형과 참조 유형 모두에서 작동합니다. New Foo(), nullFoo.Empty()하지 않습니다. 따라서 일반적인 유형의 사용에 적합합니다 (예 : 상대방을 모를 때). 하지만 대부분의 레퍼런스 유형의 경우 null이면 충분합니다. FooFoo이 값 유형 (예 : 정수)이고 클래스 타입, 제로 및 Foo이 구조체이다 그들의default() 값으로 초기화 된 모든 필드 Foo의 인스턴스 인 경우

2

관련된 실제 유형을 알고 있거나 ": class"로 제한된 유형 매개 변수가있는 경우 알려진 값 (null, 0 등)을 사용하는 것이 가장 간단합니다.

기준 유형이 아닌 제약이 있거나 제한된 유형 매개 변수가있는 경우 기본값 (T)을 사용해야합니다.