我正在将旧的C ++库转换为C#。
C ++库严重依赖覆盖 std::vector<T>
的某些元素,使用memcpy(&source[d_index],&source[s_index],count*sizeof(<T>));
(注意源和目标在这里是相同的,只是不同的索引)
我的C#端口(通过实施ICloneable
和source
显然是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上的内容。
答案 0 :(得分:1)
我自己也遇到过这个问题而且我得出了相同的结论:使用Clone或者自己制作一个复制构造函数。
对于CopyTo方法,我忘了,但不是只是再次复制引用?除此之外,你可以按照你的说法将它们保存到数组中并使用AddRange(数组)。
答案 1 :(得分:0)
RemoveRange怎么样,然后是Insert范围?显然只有范围不重叠。