通过反射访问数组



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

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

相关内容

  • 没有找到相关文章

最新更新