从对象</t>获取List <t>的类型

时间:2012-01-23 01:08:40

标签: c# list generics

我有一个列表列表,每个列表包含不同类别的对象。要将元素添加到正确的列表,我需要能够找到列表的类型。我目前正试图以这种方式实现它:

        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;
            }
         }

但是,这将返回System.Collections.Generic.List`1 [[myType,etc,etc]]的List Type。 有没有办法从列表类型中提取“myType”,以进行适当的比较?

2 个答案:

答案 0 :(得分:6)

使用GetGenericArguments方法:

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

由于myListType是一个只有一个类型参数的泛型类型的实例,因此类型T将在返回数组的第0个位置返回。

答案 1 :(得分:3)

如果没有显式检查泛型参数类型,您可以将上述代码重构为:

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