2010-01-29 3 views
3

Я передаю имя типа и некоторые параметры из кода C# в структуру навигации, написанную на VB. Структура навигации ищет конструктор типа, который соответствует параметрам, переданным с использованием Type.GetConstructor (Types()). Конструктор, который я ищу, ожидает массив целых чисел - Integer() в vb. Но он получает массив System.Int32. Я зашел так далеко, чтобы попробовать это:C#/vb.net тип несоответствия поиска конструктора отражением (Integer() vs 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

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

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

1

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

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

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

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

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

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

вместо этого, я имею в несколько раз писали код, как это:

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

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

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

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

Смежные вопросы