Несоответствие типов в C # / vb.net при поиске конструктора по отражению (Integer () и System.Int32 []) - PullRequest
3 голосов
/ 30 января 2010

Я передаю имя типа и некоторые параметры из кода C # в среду навигации, написанную на VB. Инфраструктура навигации ищет конструктор типа, который соответствует параметрам, переданным с использованием Type.GetConstructor (Types ()). Конструктор, который я ищу, ожидает массив целых чисел - Integer () в vb. Но он получает массив System.Int32. Я зашел так далеко, чтобы попробовать это:

           System.Int32[] int32Array = IdList.ToArray();
            int[] intArray = new int[int32Array.Length];
            for (int i = 0; i < int32Array.Length; i++ )
            {
                intArray[i] = (int)int32Array[i];
            }

И код VB все еще видит System.Int32 на другом конце, что означает, что он не находит конструктор.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 30 января 2010

Поскольку C # int является синтетическим сахаром для System.Int32, VB Integer также является синтетическим сахаром для того же типа. Так что не должно быть никаких проблем с вызовом того или иного.

Однако я бы проверял типы параметров информации конструктора, возвращаемой методом GetConstructor.

1 голос
/ 30 января 2010

Я собираюсь предположить, что вы совершили ту же ошибку, что и несколько раз.

Когда вы вызываете Type.GetConstructor(Type[]) и создаете массив типов, я иногда создаю массив объектов типов, по одному для каждого элемента массива.

Позвольте мне объяснить.

У меня есть массив целых чисел (System.Int32), и я хочу найти конструктор, который принимает один параметр, который является массивом таких целых чисел.

Теперь правильный путь в C # для создания массива типов, который можно передать в GetConstructor, выглядит следующим образом:

Type[] types = new Type[] { typeof(Int32[]) };

Вместо этого я несколько раз писал такой код:

Type[] types = (from v in arr select v.GetType()).ToArray();

Это глупая ошибка, но это изменение заставляет GetConstructor искать конструктор с тем же числом параметров, что и у моего массива.

Возможно, вы сделали то же самое?

Поскольку на самом деле вы не показываете нам код, который вызывает отражение, это всего лишь предположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...