Невозможно преобразовать из System.Array в int [*] - PullRequest
0 голосов
/ 07 марта 2019

В приложении, которое меня попросили разработать, я должен взаимодействовать с DLL, над которым у меня нет контроля.

Из длл я звоню:

NAMESPACE.myFunction(string Name, int[*] Coordinates)

Что это за тип int [*]? Ответ был легко найден здесь : это не основанный на 0 массив. В этом вопросе кратко упоминаются некоторые скомпилированные в LabView библиотеки DLL, что очень похоже на мой настоящий случай.

Я смог определить с помощью исследования, что только Array может иметь тип int32[*]. Простой способ доказать это - запустить этот код:

Array AAA = Array.CreateInstance(typeof(int), 4, 0);
Array AAA2 = Array.CreateInstance(typeof(int), 4, 1);
Array BBB = Array.CreateInstance(typeof(int), 4);
Array CCC = Array.CreateInstance(typeof(int), new int[] { 4 } , new int[] { 0 } );
Array DDD = Array.CreateInstance(typeof(int), new int[] { 4 });

int[] arr1 = (int[])Array.CreateInstance(typeof(int), 4);
int[] arr2 = (int[])Array.CreateInstance(typeof(int), new int[] { 4 }, new int[] { 0 });
Array arr3 = Array.CreateInstance(typeof(int), new int[] { 4 }, new int[] { 1 });

Console.WriteLine("AAA.type: " + AAA.GetType());       \\ System.Int32[,]
Console.WriteLine("AAA2.type: " + AAA2.GetType());     \\ System.Int32[,]
Console.WriteLine("BBB.type: " + BBB.GetType());       \\ System.Int32[]
Console.WriteLine("CCC.type: " + CCC.GetType());       \\ System.Int32[]
Console.WriteLine("DDD.type: " + DDD.GetType());       \\ System.Int32[]
Console.WriteLine("---");
Console.WriteLine("arr1.type: " + arr1.GetType());     \\ System.Int32[]
Console.WriteLine("arr2.type: " + arr2.GetType());     \\ System.Int32[]
Console.WriteLine("arr3.type: " + arr3.GetType());     \\ System.Int32[*]

Вопрос, на который я не могу найти ответ: как передать тип Array в вызов метода без ошибки типа преобразования ? Ошибка вызвана этим вызовом:

NAMESPACE.myFunction("", arr3)
                         ^
                         Cannot convert from 'System.Array' to 'int[*]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...