C# 泛型集合类型测试

C# 泛型集合类型测试,c#,types,generic-collections,C#,Types,Generic Collections,我想根据给定的集合类型(使用反射)进行一些操作,而不考虑泛型类型 这是我的密码: 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<,

我想根据给定的集合类型(使用反射)进行一些操作,而不考虑泛型类型

这是我的密码:

    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(类型a\U类型)
{
//检查它是否是列表的类型
if(a_type.Name==“List`1”)
{
//做事
}
//检查它是否是字典类型
else if(a_type.Name==“Dictionary`2”)
{
//做事
}
}
它现在起作用了,但对我来说这显然不是最安全的解决方案

    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
        }
    }
void MyFct(类型a\U类型)
{
//检查它是否是列表的类型
if(a_type==typeof(List))
{
//做事
}
//检查它是否是字典类型
else if(a_type==typeof(字典))
{
//做事
}
}
我也试过了,它确实可以编译,但不起作用。。。 我还尝试测试给定集合类型的所有接口,但这意味着集合中的接口具有排他性


我希望我能说清楚,我的英语缺乏训练:)

如果你想知道某个东西是否实现了特定的泛型类型,那么你需要这样做:

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

GetGenericTypeDefinition()
方法将返回用于测试的无界泛型类型。

do
a_type.ToString()。
它说什么?我怀疑您试图解决错误的问题。将特定于类型的检查添加到泛型代码是一件难事。*a_type.ToString()=>System.Collections.generic.List`1[MyClass]@s0ubap:这当然解释了针对“List`1”的测试失败的原因。。它确实有效;a_type.Name实际上是“List`1”。我只是想知道这是不是唯一的解决办法,对我来说似乎“很臭”。