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() を呼び出すことはできません。

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

ChangeType() を使用してみました:

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 を辞書の型にキャストするにはどうすればよいですか?

4

1 に答える 1

1

コメントから、動的型チェックのみを実行しようとしているため、幸いなことに動的キャストは必要ありません。

if(message.Body != null && message.Body.GetType() == fooType) ...
于 2012-06-20T03:31:17.597 に答える