Я использую отражение для обработки сборки, загруженной во время выполнения.Моя проблема в том, что один из методов имеет выходной параметр, который содержит массив структур.
Вот объявления из сборки:
public struct WHATEVER
{
}
public class SOMECLASS
{
public static int methodCall(out WHATEVER[] ppWhateverStructs);
}
И вот как я пытался выполнить:
Type tWHATEVER = Assembly.Load("path-to-Assembly").GetType("WHATEVER");
Type tSOMECLASS = Assembly.Load("path-to-Assembly").GetType("SOMECLASS");
Array objStructs = Array.CreateInstance(tWHATEVER, 1);
object[] Params = new object[] { @objStructs }; // tried with and without "@" - same thing
MethodInfo method = tSOMECLASS.GetMethod("methodCall", new Type[] { tWHATEVER.MakeArrayType().MakeByRefType() });
retVal = method.Invoke(null, Params);
когда я помещаю «Params» в окно просмотра, оно показывает, что оно содержит массив из 1 элемента, который также содержит массив N-размера, заполненный элементами, и objStructs не изменяется.Это правильно.Моя проблема в том, что я не знаю, как выбрать элементы из подмассива:
object objRestuls = Params[0];
Это утверждение работает, показывает элементы, которые я ожидаю в окне наблюдения, но я не знаю, как перебирать изабрать их с объекта.Когда я пытаюсь это сделать:
object [] objRestuls = (object [])Params[0];
Выдается следующее исключение:
An unhandled exception of type 'System.InvalidCastException' occurred in TestAssembly.dll
Additional information: Unable to cast object of type 'TestAssembly.WHATEVER[]' to type 'System.Object[]'.
У кого-нибудь есть подсказка о том, как читать массив-структуру, инкапсулированный в объект?