2010-01-29 71 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尋找一個構造函數,其參數數量與我的數組中的值相同。

也許你做過同樣的事情?

因爲你實際上沒有向我們展示調用反射的代碼,所以只是猜測而已。