buffer.blockCopy尝试填充objectlistview行时出错

时间:2012-08-08 05:04:39

标签: c# buffer rows objectlistview

我正在尝试使用Buffer.BlockCopy将数组的一部分(data.item)复制到另一个数组中。如果我尝试一件事,我会收到有关无效内容的编译器错误(见下文),如果我使用强制转换,则会出现运行时错误。但是如果我只是分配它就可以正常工作:row [item.AspecName] =“random chars”。我做错了什么?

namespace ObjectListViewFramework
{
    public partial class ObjectListviewForm : Form
    {
        public DataTable ListRows { get; private set; }
  }

 }

    public void AddRows2(DLL_conduit data)
    {
        int columnIndex;
        int bufferIndex = 0;
        for (int rowIndex = 0; rowIndex < data.rowCount; rowIndex++)
        {
            DataRow row = ListRows.NewRow();
            columnIndex = 0;
            foreach (var item in objectListView1.AllColumns)
            {
                // this works dandy
               row[item.AspectName] = "random chars";

                // compiler error: the best overloaded method match has some invalid args
                 Buffer.BlockCopy(data.item, bufferIndex, row[item.AspectName], columnIndex * 256, 256);

                 // runtime error: invalid cast 
                 Buffer.BlockCopy(data.item, bufferIndex, (char[])row[item.AspectName], columnIndex * 256, 256);      

                ++columnIndex;
                bufferIndex += 256;
            }
            ListRows.Rows.Add(row);
        }
        objectListView1.AddObjects(ListRows.DefaultView);
    }

1 个答案:

答案 0 :(得分:0)

最初,您的行没有任何相关数据。

Buffer.BlockCopy不会创建要复制的数组。你必须传递一个现有的数组,而你却没有。

您的工作代码使用索引的setter。您的非工作代码使用索引的getter来检索当前DataRow中的对象。

Buffer.BlockCopy的使用很少而且很远。