solidworks 插件 C# 的 system.Array 转换问题

Issue with out system.Array Conversion for solidworks plugin C#

我刚刚进入了一个我不太适应的 solidWorks C# 项目。我需要将此 out System.Array 转换为 string[]。然后调用该字符串并将其从 out System.Array 转换为 out EdmLib.EdmBatchError2[].

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:无法从 'out System.Array' 转换为 'out string[]'

很简单

string[] ppoRetNames;
GetSerialNumberNames(out ppoRetNames);

这是声明一个 string[] 的方法。不要自己初始化它,因为 GetSerialNumberNames 会这样做 (out-parameter)。无需使用 Array.CreateInstance.

除此之外,您正在创建一个参差不齐的数组,因为您传递的是 typeof(string[]) 而不是 typeof(string)。您需要一个一维数组,所以这是正确的:

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

GetSerialNumberNames returns System.Array 类型 EdmBatchError2,它是 4 个整数的结构,所以我不知道如何将其转换为可用的字符串 []感觉。这是我的工作:

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;
}