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 回答