2009-02-06 5 views
4

"default"키워드는 정적으로 결정된 유형의 기본값을 반환한다는 것을 알고 있습니다 (예 : this question).비 일반 방식으로 유형의 기본값을 가져 오는 방법은 무엇입니까?

그러나 유형의 인스턴스가 있으면이 유형의 기본값을 동적으로 가져 오는 간단한 방법이 있습니까?

static object DefaultValue(Type myType) 
{ 
    if (!myType.IsValueType) 
     return null; 
    else 
     return Activator.CreateInstance(myType); 
} 

하지만 가능하면 액티베이터 클래스를 피하기 위해 싶습니다 인터넷 검색을하는 동안 내가 찾은 유일한 방법은 this입니다.

+0

에 오신 것을 환영합니다 변환? http://stackoverflow.com/questions/6582259/fast-creation-of-objects-instead-of-activator-createinstancetype :) – nawfal

답변

6

가능성이 가장 높습니다.

여기서 Activator 클래스를 사용하는 것을 두려워하지 않을 것입니다. 이것은 컴파일러가 사용하는 꽤 표준적인 클래스입니다. 예를 들어이 VB 코드

Public Sub Example(Of T as New)() 
    Dim x = new T() 
End Sub 

은 표현의 세계에 약이 코드에

Public Sub Example(Of T As New)() 
    Dim x = Activator.CreateInstance(OF T) 
ENd Sub 
+0

제네릭 (OP가 피하고 싶어하는)이며 " default "- 클래스에 대해 null을 반환해야합니다. –

+0

대단히 감사합니다! 리플렉션은 강력 합니다만 단순한 솔루션이있을 때 사용하는 것을 꺼립니다. 그러나 선택의 여지가 없다면, 함께 가자. – Guulh

+0

@Marc, 매우 사실, 나는 Activator가 악의가 아닌 클래스라는 것을 보여주는 예제를 주로 제공하려고 시도했다. – JaredPar

6

왜 Activator를 사용하지 않으시겠습니까? 기본적으로 입니다.

내 말은, 일반적인 방법을 쓰고 반사를 통해이를 호출 할 수는 있지만 Activator를 피하기 위해 꽤 끔찍한 "길게 잘라 내기"입니다.

관련 문제