如何从C#3.0中的对象访问第一个值

时间:2010-04-24 07:55:45

标签: c#-3.0

如何从

访问第一个值
object t = (object) wsf.LinEst(y.ToArray(), x.ToArray(), false, true);

输出

object[1..5, 1..2]}
    [1, 1]: 0.17134831460674155
    [1, 2]: 0.0
    [2, 1]: 0.019612696690686725
    [2, 2]: -2146826246
    [3, 1]: 0.95020429009193053
    [3, 2]: 0.82746057986828336
    [4, 1]: 76.328205128205056
    [4, 2]: 4.0
    [5, 1]: 52.261235955056179
    [5, 2]: 2.7387640449438226

我只需要获得[1,1]的值,即0.17134831460674155

如何做到。

linEst只返回一个对象。

我正在使用C#3.0

由于

由于

2 个答案:

答案 0 :(得分:2)

好吧,它看起来像你可以枚举哪些返回双倍 - 虽然它可能实际上没有实现IEnumerable<double>。试试这个(在代码顶部有一个using System.Linq;指令):

IEnumerable t = (IEnumerable) wsf.LinEst(y.ToArray(), x.ToArray(), false, true);
double first = t.Cast<double>().First();

然而,如果实际上它返回int[][]之类的东西,将不会工作。你能告诉我们更多关于它真正归来的东西吗?是的,它被声明只返回object,但它显然返回了更多的东西。如果您知道它将始终返回带有基于1的索引的object[,],您可以转换为:

object[,] t = (object[,]) wsf.LinEst(y.ToArray(), x.ToArray(), false, true);
double first = (double) t[1, 1];

如果您不知道数组的下限,您当然可以通过编程方式请求它们......但LINQ方式可能会更简单。

答案 1 :(得分:1)

您可以强制转换为适当的类型。

而不是:

object t = (object) wsf.linEst(etc.)

int[,] t = (int[,]) wsf.linEst(etc.)

这是因为linEst函数不是简单地返回Object类的实例。

您在问题中包含的输出似乎暗示调试器能够确定对象的运行时类型,因此请尝试使用该信息进行正确的转换。

或者wsf.linEst不只是返回一个对象而你正在添加(object)文本,该文本强制返回值被转换为适合object t变量