我要读某个method的返回值。 
我先用VB写了以下语句: 
Dim data As Variant 
data = col.GetData(ARRAY1D_NUMERIC) 
For ii = 1 To UBound(data) 
Cells(ii, 2) = data(ii) 
Next 
读取data,输出正确,没问题。(data读到的是一个一维数组) 然后我用C#: 
object[] data = col.GetData(ARRAY1D_NUMERIC, Default, Default) as object[]; 但是data始终是null。 请问这是为什么?object和variant有些什么差别,为什么variant能做到的object做不到?请大家帮忙回答一下,谢谢!

解决方案 »

  1.   

    跟踪看看col.GetData(ARRAY1D_NUMERIC, Default, Default)到底是什么类型
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 
    http://feiyun0112.cnblogs.com/
      

  2.   

    你首先要知道,GetData(ARRAY1D_NUMERIC, Default, Default)这个方法返回的是什么类型
    如果GetData()返回的不是一个数组,而是一个对象,那么你把它转换成object[]数组,有可能会抛出异常
    你所调用的GetData()方法最好的返回一个object[]数组,或者是其他基本数据类型或对象的数组,确保返回的对象不是一个空对象
    由于,并不知道你的具体代码是怎样实现的,我也帮你这么一点,相信你一定会解决的,呵呵~
      

  3.   

    你是在调用com 吧?
    vb 的方式是使用自动化的
    col.GetData(ARRAY1D_NUMERIC) 其实不是返回一个数组而是一个hresult,vb 里的返回值应该是他的最后一个参数
    c# 里可能需要object[] data 
    col.GetData(ARRAY1D_NUMERIC, Default, out (object)data)
      

  4.   

    谢谢楼上各位的回答。是的,我是在调用一个com,
    我跟踪了它返回的类型,是system.single[*]。object不是可以包含所有类型吗?是不是可以包含single[]呢?还是它产生的是float[]我就要设置成float[],产生string[]我就要设string[]?
    另外,我用object[,] data = col.GetData(ARRAY2D_NUMERIC, Default, Default) as object[,];  后就能正常实现,(此时com中的参数变化,返回的是一个2D的array),这是为什么呢?谢谢
      

  5.   

    再补充一下,
    如果我这么写:
    object data = col.GetData(ARRAYDATAFORMAT.ARRAY1D_NUMERIC, Default, Default) as object;
    float[] data1 = (float[]) data1;
    data读到了一个{float[1..100]},可是data1仍然是null