vector 的 C# memcpy 等效项 (C# List<T>)(语法糖)

标签 c# c++ memcpy syntactic-sugar

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

C++ 库严重依赖于覆盖 std::vector<T> 的某些元素通过使用 memcpy(&source[d_index],&source[s_index],count*sizeof(<T>)); (注意这里source和target是一样的,只是索引不同而已)

我的 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 上的内容。

最佳答案

我自己也遇到过这个问题,我得出了相同的结论,要么使用 Clone,要么自己制作一个复制构造函数。

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

关于 vector 的 C# memcpy 等效项 (C# List<T>)(语法糖),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26256599/

相关文章:

c# - 如何在 C# 中存储 SQL 查询的结果字符串

C++ - Windows - 如何(写入&&读取)命令外壳

c++ - 为什么 memcpy 无法复制到简单对象的本地数组成员?

c++ - memcpy 结构变量

c - memcpy to union 没有按预期工作

c# - 你如何制作一个通用的通用工厂?

c# - 欧拉计划 : Problem 1 (Possible refactorings and run time optimizations)

c# - 如何在mysql连接中正确地将 'localhost'替换为你自己的公共(public)IP

c++ - 这是 C++ 中的未定义行为吗?

c++ - 数组声明的编译器错误?