我有一些简单的代码来证明我的问题:
private void InitializeOther()
{
List<Foo> list = new List<Foo>();
Casting(list);
}
//in the "real" case I have no knowledge of o, other than it could be a List<>
private void Casting(object o)
{
Type t = o.GetType();
while (t.BaseType != typeof(Object))
{
if (t.IsGenericType && typeof(List<>) == t.GetGenericTypeDefinition())
{
//now I know that o is of type List<>. How can I now access List<> members from o?
break;
}
t = t.BaseType;
}
}
所以,我可以确定对象o是List<T>
的(或派生的),但现在我希望能够访问o上的List<T>
成员,这意味着将其转换为{ {1}}。在我的“真实”案例中,我不了解Foo。
我很确定它可以做到,如果你知道怎么做,如果你能和我分享你的知识,我将非常感激!
答案 0 :(得分:0)
小型黑客将尝试将o
转换为非通用IList
,因为List<T>
实现了通用和非通用接口。 Collection<T>
也是如此,它是用户集合中使用最多的基类。
如果这不是一个选项,你可以随时使用反射方法调用(后期绑定):MethodInfo.Invoke()
等。