向量的C#memcpy等价物(C#List <t>)(语法糖)</t>

时间:2014-10-08 12:11:34

标签: c# c++ memcpy syntactic-sugar

我正在将旧的C ++库转换为C#。

C ++库严重依赖覆盖 std::vector<T>的某些元素,使用memcpy(&source[d_index],&source[s_index],count*sizeof(<T>));(注意源和目标在这里是相同的,只是不同的索引)

我的C#端口(通过实施ICloneablesource显然是List<T>,其中T是引用类型)是:

 for (int i = 0; i < count; i++)
    source[d_index + i] = source[s_index + i].Clone(); 

按预期工作。

但是,我的问题是:是否有更简单的版本?我显然无法使用List.InsertRange(d_index, List.GetRange(s_index, count)),因为此方法插入而不是覆盖。

我无法使用List<T>.CopyTo Method (Int32, T[], Int32, Int32),因为目标必须是T[]的数组,而不是列表本身。

是否有一种方法可以执行memcpy对此特定示例的操作?我知道我自己可以轻松实现扩展方法,我只是想知道我是否错过了MSDN上的内容。

2 个答案:

答案 0 :(得分:1)

我自己也遇到过这个问题而且我得出了相同的结论:使用Clone或者自己制作一个复制构造函数。

对于CopyTo方法,我忘了,但不是只是再次复制引用?除此之外,你可以按照你的说法将它们保存到数组中并使用AddRange(数组)。

答案 1 :(得分:0)

RemoveRange怎么样,然后是Insert范围?显然只有范围不重叠。