通过反射访问数组

时间:2012-02-03 05:55:02

标签: .net reflection

我在某个对象中创建了类型化数组:

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();

显然它不起作用。我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

如果您已开始使用LINQ帮助程序,请执行以下操作:

var list = Enumerable.ToList(temp);
list.Add(test);
tag = Enumerable.ToArray(list);

(然后使用反射来设置反对属性) - 然而,这是一种非常昂贵的扩展数组的方法(至少,一旦重复几次)。如果您可以将属性更改为列表而不是数组,则可以使用:

IList list = {reflection "get" code}
list.Add(test);

(之后无需“设定”)

答案 1 :(得分:0)

您的代码正在获取数组,将其转换为列表,然后向该列表添加元素。存储在属性中的原始数组保持不变。尝试使用以下方法将新数组设置回属性:

maket.GetType() 
 .GetProperty(q.ObjectType.xmltag) 
 .SetValue(maket, tag , null); 

答案 2 :(得分:0)

也许无类型数组列表可能很有用

var arrayList = new ArrayList((Array)tag);
arrayList.Add(newValue);
tag = arrayList.ToArray((Type)q.xmltag);