C#:将项目插入通用列表的反射

时间:2013-03-17 11:04:43

标签: c# reflection

我需要将反射创建的对象添加到通用列表中。在编译时我不知道这个对象的确切类型或通用列表的类型,但我可以确保类型匹配。

我发现很多帖子都在谈论类似的问题,但是他们要么不需要通用列表,要么在编译时知道类型。

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

如果l是您的通用列表,并且o是您的对象:

l.GetType().GetMethod("Add").Invoke(l, new object[] { o });

根据 jgauffin 的建议,您可以执行以下测试以确保您可以将对象添加到列表中:

if (l.GetType().GetGenericArguments()[0].IsAssignableFrom(o.GetType()))
{
    l.GetType().GetMethod("Add").Invoke(l, new object[] { o });
}

答案 1 :(得分:0)

使用SomeObject.GetType()获取其类型:

  MyClass t1 = new MyClass();
  Type t = t1.GetType();