Проблема отражения: передача массива аргументов с int [] внутри него - PullRequest
0 голосов
/ 01 июля 2010

У меня проблема с этим:

objectType.GetMethod("setValues").Invoke(testClass, arguments);

arguments - это массив объектов, может ли любой его член быть массивом любого типа, например, int [] ???Я спрашиваю об этом, потому что у меня есть исключение при передаче аргументов с массивом int [] в качестве члена, это исключение:

System.ArgumentException: объект типа 'System.Object []'не может быть преобразован в тип 'System.Int32 []'.

Есть предложения ??

Ответы [ 2 ]

1 голос
/ 01 июля 2010

Да, вы должны иметь возможность передавать массив целых чисел в качестве одного из параметров в вызов рефлексии.Из этой ошибки видно, что массив целых чисел на самом деле представляет собой массив объектов.

0 голосов
/ 01 июля 2010

Моя психическая отладка предполагает, что подпись setValues выглядит следующим образом:

public void setValues(int[] vals);

И вы передаете int[] на Invoke, вот так:

int[] arguments = new int[] { 1, 2, 3 };
objectType.GetMethod("setValues").Invoke(testClass, arguments);

Это не работает, потому что object[], который вы передаете Invoke, выровнен для создания фактического списка аргументов. Другими словами, ваш вызов эквивалентен вызову setValues(1, 2, 3), который не работает, потому что setValues хочет один int[] параметр, а не ряд int параметров. Вам необходимо сделать следующее:

int[] values = new int[] { 1, 2, 3 };
object[] arguments = new object[] { values };
objectType.GetMethod("setValues").Invoke(testClass, arguments);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...