2017-12-08 7 views
1

私はあまり快適ではないsolidWorksのC#プロジェクトに投げ込まれました。このout System.Arraystring[]に変換する必要があります。その文字列が呼び出され、out System.Arrayからout EdmLib.EdmBatchError2[]に変換されます。solidworksプラグイン用のシステムout.Array変換の問題C#

TLDR:out System.Array 'からstring[]です。

コード:

private void GetSerialNumberGenerators() 
{ 
    IEdmSerNoGen7 utility = this.m_vault.CreateUtility(EdmUtility.EdmUtil_SerNoGen) as IEdmSerNoGen7; 
    Array ppoRetNames = Array.CreateInstance(typeof(string[]), 0); 
    utility.GetSerialNumberNames(out ppoRetNames); 
    this.comboBoxSerialNumber.DataSource = (object) ppoRetNames; 
} 

重大度コード説明プロジェクトファイルの行の抑制状態 エラーCS1503引数1:に 'のSystem.Arrayアウト' から変換することはできません 'アウト文字列[]'

+2

なぜArray.CreateInstance(typeof(string [])、0); 'を使うのですか?あなたは配列を宣言する方法を知らないのですか?それは単純です: 'string [] ppoRetNames;'。 'GetSerialNumberNames'はそれを初期化する(' out'パラメータ)ので、あなたはする必要はありません。 –

答えて

0

それは簡単ですas

string[] ppoRetNames; 
GetSerialNumberNames(out ppoRetNames); 

これはstring[]を宣言する方法です。 GetSerialNumberNamesout-parameter)を実行するので、自分で初期化しないでください。 Array.CreateInstanceを使用する必要はありません。

typeof(string[])にはtypeof(string)を渡すので、ギザギザの配列を作成することは別としてこれが正しいだろうので、あなたは、1次元配列を必要とする:

Array someArray = Array.CreateInstance(typeof(string), 0); 
string[] ppoRetNames = (string[])someArray; // so a cast is what was missing 
0

GetSerialNumberNamesは4つのint型の構造があるタイプEdmBatchError2、ののSystem.Array返しますので、私はそれが[文字列にキャストする方法を知りません]を意味する。私は何をしているのですか?

utility.GetSerialNumberNames(out Array ppoRetNames); 
foreach(EdmBatchError2 batchError in ppoRetNames) { 
    // construct error message with below variables for each error 
    //batchError.mlFileID; 
    //batchError.mlFolderID; 
    //batchError.mlVariableID; 
    //batchError.mlErrorCode; 
}