0
我需要将通过反射创建的对象添加到通用列表中。在编译时,我不知道这个对象的确切类型或通用列表的类型,但我可以确保类型匹配。C#:将项目插入通用列表的反射
我发现了很多关于类似问题的帖子,但他们要么不需要通用列表,要么在编译时知道类型。
任何人都可以帮忙吗?
我需要将通过反射创建的对象添加到通用列表中。在编译时,我不知道这个对象的确切类型或通用列表的类型,但我可以确保类型匹配。C#:将项目插入通用列表的反射
我发现了很多关于类似问题的帖子,但他们要么不需要通用列表,要么在编译时知道类型。
任何人都可以帮忙吗?
使用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()'来检查对象是否是第一个正确的类型。 – jgauffin 2013-03-17 11:12:46
使用这种方法可以实现ForEach方法吗?如果是的话,我们如何将一个Action传递给foreach来执行? – 2014-06-13 14:40:15
@MahdiTahsildari是的,如果您有一个兼容类型的“Action'委托,那么您可以完全按照上面”Add“方法的示例进行操作。 –
2014-06-15 20:42:05