我正在将旧的 C++ 库转换为 C#。
C++ 库严重依赖于覆盖 std::vector<T>
的某些元素通过使用 memcpy(&source[d_index],&source[s_index],count*sizeof(<T>));
(注意这里source和target是一样的,只是索引不同而已)
我的 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 上的内容。
最佳答案
我自己也遇到过这个问题,我得出了相同的结论,要么使用 Clone,要么自己制作一个复制构造函数。
我忘记了 CopyTo 方法,但它不只是再次复制引用吗?除此之外,您可以按照您所说的将它们保存到数组中并使用 AddRange(array)。
关于 vector 的 C# memcpy 等效项 (C# List<T>)(语法糖),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26256599/