通过反射访问数组

发布于 2025-01-02 05:47:27 字数 432 浏览 0 评论 0原文

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

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

显然它不起作用。我怎样才能正确地做到这一点?

I created typed array in some object:

maket.GetType()
     .GetProperty(q.xmltags)
     .SetValue(maket,Array.CreateInstance(q.xmltag),0
      ), null);

Here i get that array:

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

Now i want to add some element to that array, i try such code:

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

Obviously it doesn't work. How can i do it properly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千笙结 2025-01-09 05:47:27

如果您打算使用 LINQ 帮助程序,例如:(

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

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

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

无需事后“设置”)

If you are set on using the LINQ helpers, something like:

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

(then use reflection to set that back against the property) - however, this is a really expensive way to expand an array (at least, once it is repeated a few times). If you can change the property to be a list instead of an array, you can just use:

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

(with no need to "set" afterwards)

旧情别恋 2025-01-09 05:47:27

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

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

Your code is getting an array, converting it to a list and then adding an element to that list. The original array stored in the property stays unmodified. Try setting your newly array back in the property using:

maket.GetType() 
 .GetProperty(q.ObjectType.xmltag) 
 .SetValue(maket, tag , null); 
吖咩 2025-01-09 05:47:27

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

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

maybe untyped array list can be useful

var arrayList = new ArrayList((Array)tag);
arrayList.Add(newValue);
tag = arrayList.ToArray((Type)q.xmltag);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文