2010-01-29 72 views
3

我传递类型名和从C#代码一些参数到VB写一个导航框架的构造函数。导航框架在类型上查找与使用Type.GetConstructor(Types())传递的参数相匹配的构造函数。我正在寻找的构造函数需要一个整数数组 - 在vb中的Integer()。但它得到一个System.Int32数组。只要试试这个我已经走了:C#/ vb.net类型不匹配查找由反射(整数()对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#intSystem.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寻找一个构造函数,其参数数量与我的数组中的值相同。

也许你做过同样的事情?

因为你实际上没有向我们展示调用反射的代码,所以只是猜测而已。