我有一个列表列表,每个列表包含不同类别的对象。要将元素添加到正确的列表,我需要能够找到列表的类型。我目前正试图以这种方式实现它:
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”,以进行适当的比较?
答案 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;
}