Доступ к массиву по отражению - PullRequest
0 голосов
/ 03 февраля 2012

Я создал типизированный массив в некотором объекте:

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 ]

1 голос
/ 03 февраля 2012

Если вы используете помощники LINQ, что-то вроде:

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

(затем используйте отражение, чтобы установить его обратно против свойства) - однако, это действительно дорогой способ расширения массива (по крайней мере, если его повторить несколько раз). Если вы можете изменить свойство на список вместо массива, вы можете просто использовать:

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

(без необходимости «устанавливать» впоследствии)

0 голосов
/ 03 февраля 2012

может быть полезен нетипизированный список массивов

var arrayList = new ArrayList((Array)tag);
arrayList.Add(newValue);
tag = arrayList.ToArray((Type)q.xmltag);
0 голосов
/ 03 февраля 2012

Ваш код получает массив, преобразует его в список и затем добавляет элемент в этот список. Исходный массив, сохраненный в свойстве, остается неизменным. Попробуйте установить новый массив обратно в свойство, используя:

maket.GetType() 
 .GetProperty(q.ObjectType.xmltag) 
 .SetValue(maket, tag , null); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...