5

ジェネリック型に関係なく、特定のコレクション型 (リフレクションを使用) に従っていくつかの操作を行いたいと思います。

これが私のコードです:

    void MyFct(Type a_type)
    {
        // Check if it's type of List<>
        if (a_type.Name == "List`1")
        {
            // Do stuff
        }
        // Check if it's type of Dictionary<,>
        else if (a_type.Name == "Dictionary`2")
        {
            // Do stuff
        }
    }

今のところはうまくいきますが、それが最も安全な解決策ではないことは明らかです。

    void MyFct(Type a_type)
    {
        // Check if it's type of List<>
        if (a_type == typeof(List<>))
        {
            // Do stuff
        }
        // Check if it's type of Dictionary<,>
        else if (a_type == typeof(Dictionary<,>))
        {
            // Do stuff
        }
    }

私もそれを試しましたが、実際にはコンパイルされますが機能しません...指定されたコレクションタイプのすべてのインターフェースもテストしようとしましたが、コレクション内のインターフェースの排他性を意味します...

英語のトレーニングが不足していることを明確にしたいと思います:)

4

1 に答える 1

9

何かが特定のジェネリック型を実装しているかどうかを確認したい場合は、次のようにする必要があります。

if(a_type.IsGenericType && a_type.GetGenericTypeDefinition() == typeof(List<>))

このGetGenericTypeDefinition()メソッドは、テスト対象の無制限のジェネリック型を返します。

于 2012-04-27T18:06:02.033 に答える