我需要能够通过反射来访问属性,并且知道此属性是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/