2012-02-25 3 views
2

대답은 '아니오'라고 생각되지만 C# .NET (v2.0)에서 이와 같은 작업을 수행 할 수 있습니다.일반 주조

class Converter<E> 
{ 
    public E Make(object o) 
    { 
     return o as E; 
    } 
} 

그렇지 않으면, 그것은 가능한 같은 종류를 확인하는 것입니다 : 그것은 나를 위해 오히려 하드 구글에 그래서

public bool IsType(object o, Type t) 
{ 
    return o is E; 
} 

나는 용어에 대한 확실하지 않다. 하지만 내 생각에이 두 가지 문제는 관련이 있습니다. 어떤 아이디어?

답변

5

당신은 () Operator 사용 Eo 캐스트 할 수 있습니다

class Converter<E> 
{ 
    public E Make(object o) 
    { 
     return (E)o; 
    } 
} 

당신이 as를 사용하는 경우, oE에 주조가 아닌 경우, 결과는 (E)null 때문에 o as E가하는 일 참조 형식에 E이 필요합니다. 당신은 class Constraint를 사용하여 유형을 참조 할 E을 제한 할 수 있습니다

class Converter<E> where E : class 
{ 
    public E Make(object o) 
    { 
     return o as E; 
    } 
} 

public bool IsType(object o, Type t) 
{ 
    return (o != null) ? t.IsAssignableFrom(o.GetType()) : t.IsClass; 
} 
+1

그것은 여기 아마 관련이없는, 그러나'as'도 널 (NULL) 값 형식에서 작동합니다. 예를 들어'int as int '는 컴파일됩니다. – svick

+0

첫 번째 예에서 E가 nullable 값 유형이 아닌 경우 unboxing 변환이 정확해야합니다. 즉, 객체에 boxed int가 포함되어있는 경우 int를 double로 변환 할 수 있더라도 double을 unbox하지 않을 수 있습니다. –