反射

2012-02-03 72 views
0

访问数组我在某些对象创建类型数组反射

var tag = maket.GetType().GetProperty(q.xmltags).GetValue(maket, null); 

现在我想一些元素添加到阵列中,我尝试这样的代码:

dynamic temp = tag; 
tag = temp.ToList().Add(test).ToArray(); 

显然它不起作用。我如何正确地做到这一点?

回答

1

如果您在使用LINQ助手设置,是这样的:

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

(然后使用反射来设置回防的特性) - 不过,这是扩大数组一个非常昂贵的方式(至少,一旦重复了几次)。如果你能的属性更改列表,而不是一个数组,你可以使用:

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

(没有必要“设置”之后)

+0

没错。正是我需要的。谢谢。 – 2012-02-03 06:05:21

0

您的代码得到一个数组,将其转换为列表,然后向该列表中添加一个元素。存储在属性中的原始数组保持不变。尝试设置你的新阵早在使用属性:

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

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

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