从对象中获取List<T>的类型

4

我有一个列表的列表,每个列表都包含不同类别的对象。为了将元素添加到正确的列表中,我需要能够找到列表的类型。我目前正在尝试以以下方式实现:

        foreach(object o in DataBase)
        {
            Type t = o.GetType();
            if (t != typeof(T))
                continue;
            else
            {
                List<T> L = (List<T>)o;
                L.Add(element);
                break;
            }
         }

然而,这将返回一个List类型,格式为System.Collections.Generic.List`1[[myType,etc,etc]]。是否有一种方法从List的类型中提取出'myType',以进行正确的比较?


3
那看起来是一个解决问题极其糟糕的方案。 - Mitch Wheat
可能吧 - 我只是刚开始学习反射。不过我很乐意听取建议。 - 3Pi
2个回答

7

使用GetGenericArguments方法:

Type listTypeParam = myListType.GetGenericArguments()[0];

由于myListType是具有一个类型参数的通用类型的实例,因此返回的数组中将在第0个位置返回类型T


谢谢,这正是我想要的。GetGenericArguments()中还可以包含哪些其他信息? - 3Pi
1
GetGenericArguments 返回一个数组,其中包含传递给通用类型的参数。 数组中的元素数等于类型参数的数量:例如对于 List<T>,它始终为1;对于 Dictionary<K,T>,它始终为2,依此类推。 - Sergey Kalinichenko

3

如果不显式检查通用参数类型,您可以将上述代码重构为:

foreach(object o in DataBase)
    if (o is List<T>)
    {
        (o as List<T>).Add(element)
        break;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接