我正在使用MATLAB Builder NE(MATLAB的集成.NET程序集构建器),但我遇到了数据类型的问题。
我在MATLAB中编译了一个非常简单的小函数,并为.NET构建它。我能够调用命名空间甚至函数就好了。但是,我的函数返回一个值,MATLAB默认将其作为object[]
数据类型返回。但是,我知道该值是一个整数,但我无法弄清楚如何投射它。
我的MATLAB函数如下所示:
function addValue = Myfunction(value1, value2)
addValue=value1+value2;
end
非常简单吧?
然后在.NET中我可以将其称为:
xClass.addValue (1, 3, 4);
其中xClass是MATLAB构建类的名称,但是当我尝试时:
int x = xClass.addValue (1, 3, 4);
C#出错了。 典型的.NET转换(int)不起作用。编译器声明它无法将object []转换为int。
有没有人在MATLAB中使用.NET构建器可以帮助我解决这个问题?这真的让我陷入了困境。我在零帮助下扫描了大部分MATLAB BUILDER文档(484页!)。
答案 0 :(得分:2)
我不再拥有Builder NE,但如果我没记错,你可以做类似的事情:
using MathWorks.MATLAB.NET.Utility;
using MathWorks.MATLAB.NET.Arrays;
int x = ((MWNumericArray)(xClass.addValue(1, 3, 4)).ToScalarInteger();
使用IntelliSense和MWArray
,MWCellArray
,MWStructArray
和MWNumericArray
类型的类浏览器比MATLAB文档更有用。
尽管如此,我对addValue
电话中的第一个参数感到困惑?
答案 1 :(得分:1)
您在即时窗口中看到的是告诉您结果[0]包含两个维度中长度为1的二维数组。数据在[0,0]元素中,因为数组是从0开始的。
以下演员看起来很丑,但会将7分配给x:
int x = ((int[,])result[0])[0,0]
答案 2 :(得分:0)
当我这样做时,我也会收到转换错误。但是,我输入了:
结果[0]进入中间窗口,然后返回:
> {int[1, 1]}
> [0, 0]: 7
我无法隔离“7”,这让我发疯了。 : - )
答案 3 :(得分:0)
结果是Object [],因为Matlab可以返回结果参数的向量。
我有一段时间没有使用Matlab NE,所以我不记得确切的语法,但是, Matlab使用MWArray,您必须检查MWArray的成员以查看您有权访问的内容。
我认为result [0]是一个包含int。
的MWArray答案 4 :(得分:0)
在我的特定情况下,我有一个double
结果。
double suma=((double[,])xClass.addValue(1, 3, 4)[0])[0,0];
然后您可以转换为int
int x = Convert.ToInt32(suma);