Отражение .NET: как мне пройти через объект, который является типом массива? - PullRequest
7 голосов
/ 07 июня 2011

У меня есть метод, который возвращает массив, тип которого я сохранил в объекте Type далее.Вот код, который у меня есть для этого:

Type StoryType = Type.GetType("my.ns.Story");
Type StoryTypeArray = Type.GetType("my.ns.Story[]");

object stories = SomeMethodInfo.Invoke(BigFatObject,some_params);

В этом примере я знаю, что истории имеют тип StoryTypeArray, и я действительно хочу что-то вроде:

foreach (Story instance in stories) { ... }

Однако я не могу понять, как превратить объект stories во что-то, через что я могу пройти и извлечь данные.

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 07 июня 2011

Из вашего вопроса не ясно, действительно ли тип Story известен вам во время компиляции. Если это так, решение тривиально; просто приведите stores к Story[] и переберите его как обычно:

foreach(Story instance in (Story[])stories) { ... }

Это также означает, что StoryType можно записать как typeof(Story), а StoryTypeArray можно записать как typeof(StoryTypeArray[]) вместо использования менее безопасного Type.GetType, который вы используете.

Если тип на самом деле вам неизвестен во время компиляции, вы не сможете написать foreach(Story instance..., так как это не будет допустимый тип. Если вы просто хотите перебрать массив, вы можете сделать это:

foreach(object item in (Array)stories) { ... }
1 голос
/ 07 июня 2011

Если по каким-то причинам вы должны сделать это с помощью рефлексии, вот решение:

a.GetType().GetMethod("Get").Invoke(a, new object[]{0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...