我在某个对象中创建了类型化数组:
maket.GetType()
.GetProperty(q.xmltags)
.SetValue(maket,Array.CreateInstance(q.xmltag),0
), null);
在这里我得到了数组:
var tag = maket.GetType().GetProperty(q.xmltags).GetValue(maket, null);
现在我想给这个数组添加一些元素,我尝试这样的代码:
dynamic temp = tag;
tag = temp.ToList().Add(test).ToArray();
显然它不起作用。我怎样才能把它做好?
如果您已设置使用LINQ助手,则类似于:
var list = Enumerable.ToList(temp);
list.Add(test);
tag = Enumerable.ToArray(list);
(然后使用反射将其与属性进行对比)-然而,这是一种非常昂贵的扩展数组的方法(至少在重复几次之后)。如果您可以将属性更改为列表而不是数组,则只需使用:
IList list = {reflection "get" code}
list.Add(test);
(之后无需"设置")
您的代码获取一个数组,将其转换为列表,然后向该列表添加一个元素。存储在属性中的原始数组保持不变。尝试使用将您的新数组设置回属性中
maket.GetType()
.GetProperty(q.ObjectType.xmltag)
.SetValue(maket, tag , null);
也许非类型数组列表是有用的
var arrayList = new ArrayList((Array)tag);
arrayList.Add(newValue);
tag = arrayList.ToArray((Type)q.xmltag);