C#调用类库报错CS1503:无法将out double[]转换为out double[*]如何解决
错误含义
double[*]是.NET平台用于标识一维非零基数组的特殊语法,这类数组的下标起始值不是0,大多是从非C#开发的程序集(如COM组件、VB.NET类库、其他跨语言编译的工具库)中导出的类型。
你在Visual Studio元数据中看到的out double[]声明是IDE的简化展示,实际类库导出的第二个参数类型为一维非零基数组,和C#默认创建的零基一维数组double[]属于不同的类型,因此编译时会抛出类型不匹配错误。
解决方案
以下是经过验证的可行修复方案:
- 使用
Array基类接收返回值后转换
非零基数组和C#普通数组都继承自Array基类,你可以先通过Array类型接收out参数,再拷贝为普通double数组:
Array daqDataArray; StartReadingDAQ(_DATALength, out daqDataArray, out _SamplingRate, out _ErrorMessage); // 将非零基数组装载到普通double数组 double[] xxx = new double[daqDataArray.Length]; daqDataArray.CopyTo(xxx, 0);
- 调整类库导出规则(仅适用于可修改类库源码的场景)
如果你有权限修改该DAQ类库的源码,可以在类库代码中强制导出零基一维数组,C#调用端就可以直接用double[]类型接收参数,无需额外转换。 - 临时调试用dynamic绕过编译检查(生产环境不推荐)
如果仅需要临时验证功能,可以用dynamic跳过编译期类型校验,该方案会丢失类型安全校验,不建议在正式代码中使用:
dynamic libInstance = 你的DAQ类名; double[] xxx = new double[_DATALength]; libInstance.StartReadingDAQ(_DATALength, out xxx, out _SamplingRate, out _ErrorMessage);
内容的提问来源于stack exchange,提问作者fike
相关产品推荐
相关产品推荐

