2017-02-09 71 views
0

我有一個Labview interop assembly需要string[* ],int[* ]customType[*]各種結構和方法。互操作類想要的數組類型[*]

例如,這是在元數據中的結構的聲明:

public struct AppImage__32Properties 
{ 
    ... 
    public FPGA__32Properties[] fPGA__32Properties; 
...} 

fPGA__32Properties是結構的陣列。

現在我想分配給它一個相同類型的空數組 (其實例未初始化),然後繼續填充其字段。

AppInfoDummy[0].appImage__32Properties.fPGA__32Properties = 
      new FPGA__32Properties[1]; 

,但它會導致

「無法隱式轉換類型 'DeployImage_RAD.FPGA_32Properties []' 到 DeployImage_RAD.FPGA_32Properties [*]」

我與其他struct,INT從interop裝配了同樣的問題和type [*]string arrays

顯然someType[*]是一個數組,它的起始索引不是零。 (What does System.Double[*] mean),並且有一種方法可以訪問它的值。但是,我如何爲它分配一個值?

順便說一句:我在Visual Studio 2012職業工作之前,這個問題並沒有發生。現在我使用Visual Studio 2015教授

回答

2

您需要直接使用Array類。在這種情況下,C#不能真正幫到你(VB.NET將使這更容易,因爲它本身支持自定義的更低和更高邊界,不像C#)。

爲樣本,如果你需要一個雙陣列1將10,將它定義爲:

Array doubleArray = Array.CreateInstance(typeof(double), new []{ 10 }, new []{ 1 }); 

訪問的指數也經歷Array

doubleArray.SetValue(42d, 3); // Set value 42d at index 3 
doubleArray.GetValue(3); // Get value at index 3 (offset 2 in this case) 

它可能做一個安全的包裝器(或者一個靜態類型的副本)的實例是一個好主意,只是爲了更容易使用,更明確的是哪個Array是哪個。

+0

謝謝Luaan。 Visual Studio接受這一點,我可以構建解決方案。但是,我還是無法測試它,因爲在該代碼中string [*]有另一個問題。 當我測試成功時,我會標記你的答案。 – Simorgh

+0

嗨Luaan,我無法用Array.CreateInstance創建一個類型爲string [*]的實例。其中一些數組是字符串[*]。 – Simorgh

+0

@Simorgh它適合我。初始化字符串數組中的值時遇到問題嗎?你有一些例外嗎? – Luaan

相關問題