2012-06-20 4 views
0

에서 입력합니다 : 나는 사전을 통해 반복하고 사전에 지정된 유형에 개체를 캐스팅하기 위해 노력하고있어캐스트는 유형에 약간의 ID를 매핑하는 사전을 감안할 때 구성

Dictionary<int, Type> processIdToTypeMapping 

. 개체는 MSMQ에서 가져옵니다.

foreach (KeyValuePair<int, Type> processIdToType in processIdToTypeMapping) 

내가 제네릭을 사용하려고했습니다 :

private void CreateObject<T>() 
{ 
    FooBase fooBase = message.Body as T; 
} 

을하지만 그 컴파일시에 유형을 알 필요 여기

내가 사전을 반복하고있어 방법입니다.

CreateObject<typeof(processIdToType.Value)>(); // That can't work. 

나는()의 ChangeType를 사용하여 시도 : :이 같은() CreateObject를 호출 할 수 없습니다

private void CreateObject(Type fooType) 
{ 
    FooBase fooBase = Convert.ChangeType(message.Body, fooType); 
} 

그러나 나는 그것을 변환 할 수있는 컴파일시 오류가 발생합니다.

내가로 을 시도 :

private void CreateObject(Type fooType) 
{ 
    FooBase fooBase = message.Body as typeof(fooType); 
} 

어떻게 사전의 종류에 message.Body 캐스팅 할 수 있습니까?

+0

... 나는이 요점을하지 않을 수 있습니다 이해하지만 당신의 예제에서, 당신은 동적 형식으로 캐스팅 할,하지만 그 유형은, 그것이 암시 FooBase''에 캐스팅 될 수 있습니다 무엇이든 생각하는 'message.Body'는 적어도'FooBase' 이상이므로 역동적 인 변환은 불필요합니다. – HackedByChinese

+0

맞습니다. 좋은 지적입니다. FooBase로 전송하는 것이 충분히 좋은지 확인해야합니다. 이것은 자동화 된 테스트 코드이기 때문에 구체적인 유형으로 변환하려고했는데 큐의 메시지가 실제로 정확한 유형인지 확인하려고합니다. –

+0

정확히 무엇을하려합니까? 인스턴스를 특정 유형으로 위협하는 것을 관리하면 무엇을 할 수 있습니까? 컴파일 시간에 당신은 여전히 ​​그것이 어떤 타입인지 알지 못하기 때문에, 당신은 기본적으로 그 스펙을 사용하는 것이 제한되어 있습니다. 편집, 오, 내가 볼 :) – Polity

답변

1

댓글에서 동적 유형 확인 만하려고하므로 다행히 동적 전송은 필요하지 않습니다.

if(message.Body != null && message.Body.GetType() == fooType) ...