我需要能够通过反射来访问属性,并且知道此属性是IEnumerable,因此可以向其添加对象。

像这样:

Object o;
MemberInfo m;

Array arr; // Except use IEnumerable, may have to take account of value/ref types
arr = (Array)((PropertyInfo)m).GetValue(o, null); }

List<o.GetType()> newArr = new List<o.GetType()>(); /* fails */
newArr.AddRange(arr);
newArr.Add(o);

((PropertyInfo)m).SetValue(o, newArr.ToArray(), null);


你能帮我解决我的问题吗:-)

解:

查看已接受的答案评论。另外(Get the actual type of a generic object parameter)也有帮助。

最佳答案

听起来您实际上是在问如何根据编译时未知类型制作List<T>。为此,您将不得不使用更多的反射魔术:

Type genericListType = typeof(List<>);
Type listType = genericListType.MakeGenericType(o.GetType());
object listInstance = Activator.CreateInstance(listType);


这将在运行时类型之外创建List<T>

但实际上,如果您仅使用ArrayList,您的代码就会简单得多:

ArrayList list = new ArrayList(arr);
list.Add(o);
Array newArray = list.ToArray(o.GetType());

关于c# - 通过反射将对象附加到IEnumerable <>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1365673/

10-13 08:43