code=C#]byte[] ba = new byte[recordSize];
           
            for (int index = 0; index < recordNum; index++)
            {
                fs.Read(ba, 0, ba.Length);
                System.IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(ba, 0);
                trs[index] = (TdxRawRecord)Marshal.PtrToStructure(ptr, typeof(TdxRawRecord));
            }            RecordOpration ro = new RecordOpration("test");
            DataTable recordsTable=ro.Translate(trs);[/code]
问题1
在循环时,ptr地址会不会改变?可不可以把 System.IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(ba, 0);放在循环外面?有没有可能循环过程中发生改变
问题2
 DataTable recordsTable=ro.Translate(trs);[/code]
其中RecordOpration 中创建一个DataTable,Translate添加行,然后返回这个DataTable
那调用Translate的方法中,并未新建datatable对象是把,recordsTable只是一个引用,指向ro中的datatable?
对不对
这样好 还是DataTable recordsTable=new DataTable();
            ro.Translate(trs);
这样好

解决方案 »

  1.   

    应为
    DataTable recordsTable=new DataTable();
                recordsTable=ro.Translate(trs);
      

  2.   

    C#里很少有指针和引用,C#不是底层语言,目的是让程序员多考虑业务逻辑,而不是内存管理System.IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(ba, 0);这里不考虑是指针,是实实在在的一个对象,每次循环都会改变,不存在指针引用地址