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

C#:将项目插入通用列表的反射,c#,reflection,C#,Reflection,我需要将反射创建的对象添加到通用列表中。在编译时,我不知道这个对象的确切类型或泛型列表的类型,但我可以确保类型匹配 我发现很多帖子都在讨论类似的问题,但它们要么不需要泛型列表,要么在编译时就知道类型 任何人都可以提供帮助?使用SomeObject.GetType()获取其类型: MyClass t1 = new MyClass(); Type t = t1.GetType(); 如果l是您的通用列表,而o是您的对象: l.GetType().GetMethod("Add").Invok

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

我发现很多帖子都在讨论类似的问题,但它们要么不需要泛型列表,要么在编译时就知道类型

任何人都可以提供帮助?

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

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

如果
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.您还可以演示他如何使用
type.GetGenericArguments()
type.IsAssignableFrom()
首先检查对象的类型是否正确。是否可以使用此方法实现ForEach方法?如果是,我们如何将操作传递给要执行的foreach?@MahdiTahsildari是的,如果您有类型兼容的
Action
委托,您可以完全按照上面的
Add
方法的示例执行。